【发布时间】:2014-07-25 19:16:32
【问题描述】:
我正在开发一个可以计算智商的 Java 网络应用程序。我希望应用程序最后有一个选项Get Your Certificate。我希望使用预先输入的用户姓名和他的 IQ 分数自动生成一个 PDF 文件(感谢证书)。
如何实现这一目标?我已经在一些提供认证的网站上看到了这种类型的功能..
【问题讨论】:
标签: java jsp jakarta-ee servlets pdf
我正在开发一个可以计算智商的 Java 网络应用程序。我希望应用程序最后有一个选项Get Your Certificate。我希望使用预先输入的用户姓名和他的 IQ 分数自动生成一个 PDF 文件(感谢证书)。
如何实现这一目标?我已经在一些提供认证的网站上看到了这种类型的功能..
【问题讨论】:
标签: java jsp jakarta-ee servlets pdf
看看iText samples。您可以填写a form,然后单击“拼合”,您就有了一个包含您使用的数据的PDF。当您谈论证书时,最简单的解决方案是使用 AcroForm 技术创建 PDF 模板。例如:state.pdf 是我刚才提到的示例中使用的交互式 PDF。
可以在here 找到用于填写和展平此表单的代码。有关更多示例,请阅读Chapter 6 of my book "iText in Action"(该章节免费提供;您需要第 6.3.5 节)。我还写了一章关于在 Web 应用程序中集成这样的代码的完整章节。您可以找到本章附带的示例here。
基本上,你需要做这样的事情:
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader,
new FileOutputStream(dest));
AcroFields fields = stamper.getAcroFields();
fields.setField("name", "CALIFORNIA");
fields.setField("abbr", "CA");
fields.setField("capital", "Sacramento");
fields.setField("city", "Los Angeles");
fields.setField("population", "36,961,664");
fields.setField("surface", "163,707");
fields.setField("timezone1", "PT (UTC-8)");
fields.setField("timezone2", "-");
fields.setField("dst", "YES");
stamper.setFormFlattening(true);
stamper.close();
reader.close();
关于输入数据的警告:这个简单的例子使用了一种非常基本的字体,它不知道如何显示特殊字符。如果您需要 ñ、é、à 等字符...您需要引入具有更多字形的字体。
关于您使用的jsp-tag 的警告: 我写了这个helloworld.jsp,结果是this PDF,这证明可以从JSP 生成PDF。然而,这样做是个坏主意。当您学习如何编写 JSP 时,您的老师可能告诉您不应该使用 JSP 来创建二进制文件。 (如果他没有告诉你这个,他要么忘记了,要么他不是一个好老师。)由于使用 JSP 创建二进制文件时有很多陷阱,而且 JSP 文件最终还是编译为 Servlet,所以你应该忘记创建 JSP 来创建 PDF 并更喜欢编写 Servlet。这将为您节省大量时间,并且您的代码将更易于维护(对 JSP 文件的最轻微更改都会破坏代码)。
【讨论】: