【问题标题】:Auto-generate the Content in PDF format - Java自动生成 PDF 格式的内容 - Java
【发布时间】:2014-07-25 19:16:32
【问题描述】:

我正在开发一个可以计算智商的 Java 网络应用程序。我希望应用程序最后有一个选项Get Your Certificate。我希望使用预先输入的用户姓名和他的 IQ 分数自动生成一个 PDF 文件(感谢证书)。

如何实现这一目标?我已经在一些提供认证的网站上看到了这种类型的功能..

【问题讨论】:

    标签: java jsp jakarta-ee servlets pdf


    【解决方案1】:

    Java PDF API

    • Here 是一个类似问题的答案,引用了一些知名的 API。
    • Here 是一篇更新的文章,详细介绍了这些 API 的许可。
    • 还有another 资源列表。

    控制流程

    1. 用户单击一个链接,该链接生成将由 servlet 处理的请求。
    2. 从 servlet 中的 URL 中提取您需要的任何内容。
    3. 使用您选择的 API 通过编写器构建 PDF 内容。
    4. 将 PDF 推送到客户端。

    【讨论】:

      【解决方案2】:

      看看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();
      

      关于输入数据的警告:这个简单的例子使用了一种非常基本的字体,它不知道如何显示特殊字符。如果您需要 ñ、é、à 等字符...您需要引入具有更多字形的字体。

      关于您使用的-tag 的警告: 我写了这个helloworld.jsp,结果是this PDF,这证明可以从JSP 生成PDF。然而,这样做是个坏主意。当您学习如何编写 JSP 时,您的老师可能告诉您不应该使用 JSP 来创建二进制文件。 (如果他没有告诉你这个,他要么忘记了,要么他不是一个好老师。)由于使用 JSP 创建二进制文件时有很多陷阱,而且 JSP 文件最终还是编译为 Servlet,所以你应该忘记创建 JSP 来创建 PDF 并更喜欢编写 Servlet。这将为您节省大量时间,并且您的代码将更易于维护(对 JSP 文件的最轻微更改都会破坏代码)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        相关资源
        最近更新 更多