【问题标题】:Creating a dynamic PDF in Java在 Java 中创建动态 PDF
【发布时间】:2014-04-28 16:51:31
【问题描述】:

这不是重复的问题。在发布这个问题之前,我已经搜索并尝试了很多选项。

我们有一个网页,其中用户应该能够在文本框、文本区域、图像以及富文本编辑器中输入数据。此数据必须填写在现有报告中,例如填写空白。

当用户输入是简单文本时,我能够使用 Apache FOP 实现该功能。但如果用户输入是富文本(html 格式),则 Apache FOP 不起作用。 FOP 不会呈现 html,它只是将 html 代码(例如:<strong> XYZ /strong>)推送到 pdf 中。 我尝试使用 iText,但这里的挫折是即使 iText 支持将 html 呈现为 pdf,它也无法将包含在 <img> 标签中的图像放置在 pdf 文件中。

我可以尝试使用 iText api 逐块创建 pdf,但问题是用户输入的富文本数据无法嵌入代码之间,因为逐块构建 pdf 和 html 到 pdf 不能一起完成在 iText 中。或者至少从我的经验中我是这么认为的。

还有其他方法可以从 java 创建带有图像、富文本渲染、页眉和页脚的 pdf 文件吗?

【问题讨论】:

    标签: java html pdf


    【解决方案1】:

    iText 提供将 HTML 数据转换为 Pdf 的功能。下面是执行此操作的 sn-p:

     Lets assume the html data is available as Input Stream (If its a String then we can convert it to InputStream using Apache Commons - IOUtils)
     InputStream htmlData; // Html Data that needs to converted to Pdf
    
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
     Document document = new Document();
     PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);
     document.open();
    
     // convert the HTML with the built-in convenience method
     XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document, htmlData);
    
     document.close();
    // outputStream now has the required pdf data
    

    【讨论】:

    • 感谢您的回复。我试过这种方法。但正如我所说,如果 html 中有任何 标签,它将不会呈现。图片应该出现在 pdf 中的位置将是空白。
    【解决方案2】:

    我是 Aspose 的社交媒体开发人员,要将富文本添加到 PDF 文件中的表单字段,您可以尝试我们的 Aspose.Pdf for Java API。检查以下示例代码:

    // Open a PDF document                                                                         
    com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("c:\\data\\input.pdf");      
    
    //Find Rich TextBox field using Field Name                                                     
    RichTextBoxField textBoxField1 = (RichTextBoxField)pdfDocument.getForm().get("textbox1");      
    
    //Set the field value                                                                          
    textBoxField1.setValue("<strong> XYZ </strong>");                                              
    
    // Save the modified PDF                                                                       
    pdfDocument.save("c:\\data\\output2.pdf");   
    

    【讨论】:

    • 感谢您的建议。 Aspose.pdf 会呈现带有 标签的 html 吗?我在使用 iText 时遇到了这个问题。我能够使用 iText 将一个大的 html 渲染到 7 页的 pdf 文件。但是 iText 无法将 html 中的图像放置到 pdf 中。我一定会探索 Aspose.pdf,但如果您能回答我的一些问题,我将不胜感激。我可以使用从富文本编辑器返回的数据创建 pdf 吗?它可以将 标签渲染到图像吗?提前致谢。
    • 我可以在 2 个段落之间或在可能的情况下使用 Aspose.pdf 在现有 pdf 中添加富文本或图像吗?
    【解决方案3】:

    我不是想推销或推广这个产品。这个 api 实际上解决了我们的问题,所以想提一下它,因为它可能会帮助其他开发人员。如果这违反了您的政策,请告诉我。

    我终于意识到,我的需求的解决方案无法使用 FOP、iText、Aspose、Flying Saucer、JODConverter 来实现。

    我找到了一个付费 API Sferyx。此 api 允许将非常复杂的 html 渲染为 pdf 几乎保留原始样式。它还呈现包含在 html 中的图像。我们仍在探索此 api,并将发布此 api 提供的其他功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2011-04-16
      • 2012-01-15
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多