2014-02-18 112 views
3

在Java中使用iText和Apache Velocity模板文件(.vm)生成PDF的一般工作流程是什么?使用iText和apache velocity模板生成PDF文件(.vm)

我想知道像步骤:解析模板文件,把Java对象的背景和步骤进行生成PDF等

我知道这是一个非常基本的问题。但是,我甚至无法在网络上找到这种类型的单个示例。我发现XDocReport,但我很想知道其他的选择。

请帮助我一些示例项目链接或至少步骤开始。

+0

你对XDocReport的限制是什么? – Angelo

+0

是否可以在xdcoreport中设置pdf文件的编辑密码?我指的是iText中的PDFWriter.setEncryption方法。 – TechnoCrat

+0

嗨@Angelo,在这里添加问题:http://stackoverflow.com/questions/21871887/set-encryption-password-for-pdf-in-xdocreport。请看一下。 – TechnoCrat

回答

4

利用iText和Java的Apache的Velocity模板文件(.vm)生成PDF直接是不可能的,因为:

  • PDF是二进制格式,
  • 速度产生纯文本内容。

换句话说,Velocity不能生成PDF。

XDocReport能够通过合并包含一些Velocity/Freemarker语法的docx/odt模板和Java上下文来生成docx/odt报告。生成的docx/odt报告可以将其转换为pdf/xhtml。

它的工作原理是docx/odt是一个包含多个xml条目的zip文件。如果你解压缩docx,你会看到word/document.xml。在此条目中,您将看到您使用MS Word键入的内容。 word/document.xml是纯文本,所以在这种情况下可以使用Velocity。

这里XDocReport处理,以生成从使用速度的DOCX模板PDF:

  1. 负载的docx模板。这一步包括解压缩docx并将每个xml条目(名称条目作为键和字节数组作为值)存储在映射中。例如,map包含一个带有word/document.xml和该条目的xml内容作为值的键。
  2. 为每个必须与Java上下文合并的xml条目循环。例如,通过使用Velocity将word/document.xml与Java上下文合并,并将合并的结果替换为地图的word/document.xml值。
  3. 通过压缩映射的每个条目来重建新的docx。

在这一步我们有一个生成的docx(报告)。

为了将其转换为另一种格式,XDocReport提供了基于Apache POI和iText的docx-to-pdf转换器。这里的XDocReport过程到DOCX转换为PDF:

  1. 使用Apache POI
  2. 回路负荷的docx为POI(XWPFParagraph等)的各结构,以创建iText的结构(iText的段落)。

请注意,XDocReport是模块化的,您也可以使用其他转换器。

4

是的,你可以。这一切都取决于你想要PDF的复杂程度。

下面是基本功能

  1. 生成使用Apache Velocity模板文件(.vm)一个HTML文件的步骤。
  2. 使用com.itextpdf.text.html.simpleparser.HTMLWorker(不建议使用)将该HTML文件解析/转换为PDF。
  3. 此外,您可以使用com.itextpdf.text.pdf.PdfCopy.PageStamp将内容(边框,图章,注释,注释等)添加到现有的PDF中。

还有com.itextpdf.tool.xml.XMLWorker更高级的HTML转换(将样式表等)

0

起初,我们用的freemarker模板来生成一个HTML文件,然后通过IItextRender。最后呈现HTML PDF文件,我们可以在浏览器中查看pdf文件,这里有一个非常有用的JavaScript工具,称为pdfjs。也许你可以尝试一下。