2016-11-04 28 views
0

我正在开发一个Spring MVC项目,其中我们有用户为我们注册。现在,无论何时用户注册,我们都希望填写用户的姓名,地址等信息,同时保持用户的某些部分不变,如我们的姓名,地址等。一旦填写完毕,将其转换为PDF并将其转换为PDF将它附加到电子邮件中。我有表格可用作doc,pdf,html。我已经有了在电子邮件中附加文件的代码。Spring,Java:填写表单并转换为PDF

这个问题最好的策略是什么?谢谢。

+0

看着你的代表,你知道如何提出问题。张贴一些代码人。 :) –

+0

@ChiragParmar:没有代码人,我只是想找到解决这个问题的最佳方法。就像我应该使用HTML表单并填写它或其他一些字。 –

回答

2

最好的解决方案是将表单提供为PDF格式(AcroForm技术)。然后,您可以使用PDF库来填写表单,其中包含从HTML表单中检索的数据。

见例如:How to fill out a pdf file programatically?

PdfReader reader = new PdfReader(src); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
AcroFields form = stamper.getAcroFields(); 
form.setField(key, value); 
stamper.setFormFlattening(true); 
stamper.close(); 
reader.close(); 

如果您删除行stamper.setFormFlattening(true);形式仍然是互动的。通过添加该行,您可以删除所有表单字段(以及交互性)。

你甚至可以请人填写PDF形式都是在这里完成:Edit pdf embedded in the browser and save the pdf directly to server

我认为Spring提供(一个强大的旧版本)的iText。您可能想要使用最新版本。请查阅官方网站,以了解更多关于iText 5和iText 7之间的区别。

+0

这工作很好,很容易。谢谢。 –

1

您可以使用java的JasperReport实用程序。在这一点上,你需要做的是创建一个标准的Jasper模板(.jasper扩展文件),你可以在其中配置尽可能多的字段,并使用java代码填充报表运行时间,同时将事情固定为像你的名字,你不需要的地址当你得到你的用户请求对象时,感受每个用户的请求。

贾斯珀有能力在后端填写此模板,它允许您生成pdf运行时间,您可以在需要的电子邮件响应中附加此运行时间。

首先,输入JSON:

{ 
    "userName": "Evil Raat", 
    "details": { 
     "email": "[email protected]" 
    } 
} 

然后创建在iReport的设计师一个JSON数据源,并在你的文件指向它(保留所有其他细节,其默认值)

接下来,您可以使用下面的JRXML模板来呈现上述JSON到报告:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="sample" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a894078a-929b-4aae-a1d0-46485f0f8835"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="0"/> 
    <queryString language="json"> 
     <![CDATA[]]> 
    </queryString> 
    <field name="userName" class="java.lang.String"> 
     <fieldDescription><![CDATA[userName]]></fieldDescription> 
    </field> 
    <field name="userEmail" class="java.lang.String"> 
     <fieldDescription><![CDATA[details.email]]></fieldDescription> 
    </field> 
    <title> 
     <band height="200" splitType="Stretch"> 
      <textField> 
       <reportElement uuid="3b74775b-4555-43c3-bdf2-1677145c8660" x="0" y="31" width="555" height="20"/> 
       <textElement textAlignment="Right"> 
        <font fontName="Helvetica" size="12" isBold="true"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$F{userName}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement uuid="aa6cc7c8-2ca1-4f0f-92e2-c466083daba0" x="0" y="54" width="555" height="20"/> 
       <textElement textAlignment="Right"> 
        <font fontName="Helvetica" size="12" isBold="true"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$F{userEmail}]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 

比你可以创建类似的代码,

Resource resource = new ClassPathXmlApplicationContext().getResource("classpath:reports/project.jrxml"); 
JsonDataSource ds = new JsonDataSource(new File("c:\myjson.json")); 
jasperDesign = JRXmlLoader.load(resource.getInputStream()); 
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds); 
JasperExportManager.exportReportToPdfFile(jasperPrint, destination+fileName+".pdf"); 

在上面的代码中,我使用.json文件作为数据源来填充报表。您可以运行时生成json并在填写报告时提供它。

+0

任何工具在创建时可视化碧玉报告文件。 –