用Java创建动态PDF

时间:2014-04-17 14:19:28

标签: java html pdf

这不是一个重复的问题。在发布此问题之前,我曾搜索并尝试了许多选项。

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

当用户输入是简单文本时,我能够使用Apache FOP实现功能。但是如果用户输入是Rich Text(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文件,富文本呈现,页眉和页脚?

3 个答案:

答案 0 :(得分:0)

iText提供将HTML数据转换为Pdf的功能。以下是要执行此操作的代码段:

 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

答案 1 :(得分:0)

我是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");   

答案 2 :(得分:0)

我不是在尝试营销或推广此产品。这个api实际上解决了我们的问题所以想到它可能会帮助开发人员。如果这违反了你的政策,请告诉我。

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

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