Spring,Java:填写表格并转换为 PDF

Posted

技术标签:

【中文标题】Spring,Java:填写表格并转换为 PDF【英文标题】:Spring, Java : Filling out a form and converting to PDF 【发布时间】:2016-11-04 10:18:59 【问题描述】:

我正在开发一个 Spring-MVC 项目,其中有用户为我们注册。现在,每当用户注册时,我们希望填写用户的姓名、地址等信息,同时保持其中的某些部分不变,例如我们的姓名、地址等。填写完成后,将其转换为 PDF 格式将其附加到电子邮件中。我有提供 doc、pdf、html 格式的表格。我已经有了在电子邮件中附加文件的代码。

解决这个问题的最佳策略是什么?谢谢你。

【问题讨论】:

看看您的代表,您就知道如何提出问题。发布一些代码人。 :) @ChiragParmar :还没有代码,我只是想找到解决这个问题的最佳方法。就像我应该使用 HTML 表单并填写它或其他东西一样。 【参考方案1】:

最好的解决方案是将表单作为 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 的区别。

【讨论】:

【参考方案2】:

您可以使用 java 的 JasperReport 实用程序。您需要做的是创建一个标准的 Jasper 模板(.jasper 扩展文件),您可以在其中配置任意数量的字段并使用 java 代码填写报告运行时间,同时保持您的姓名、地址等您不需要的内容不变当您获得用户请求对象时,感受每个用户请求。

Jasper 可以在后端填写此模板,它允许您生成 pdf 运行时,您可以将其附加到您想要的电子邮件回复中。

首先,输入JSON:

 
    "userName": "Evil Raat",
    "details": 
        "email": "not_really@test.com"
    

然后在 iReport Designer 中创建一个 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  splitType="Stretch">
            <textField>
                <reportElement uuid="3b74775b-4555-43c3-bdf2-1677145c8660" x="0" y="31"  />
                <textElement textAlignment="Right">
                    <font fontName="Helvetica" size="12" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$FuserName]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="aa6cc7c8-2ca1-4f0f-92e2-c466083daba0" x="0" y="54"  />
                <textElement textAlignment="Right">
                    <font fontName="Helvetica" size="12" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$FuserEmail]]></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 并在填写报告时提供。

【讨论】:

在创建时可视化 jasper 报告文件的任何工具。 您可以包含 Eclipse 市场中提供的 jasper 插件。安装此插件后,您将能够查看您的报告将如何基于 xml 进行查看。

以上是关于Spring,Java:填写表格并转换为 PDF的主要内容,如果未能解决你的问题,请参考以下文章

将 PDFS 转换为 JPEGS 并将转换后的 jpeg 移动到它们各自的子文件夹中

将pdf转换为图像但放大后

登录 - 填写表格并提交

利用EasySQLMAIL实现自动填写Excel表格并发送邮件

java 如何将html(包含表格,图片)转换为word

将多页 PDF 转换为 PNG 并返回 (Linux)