Java 使用iText和apache velocity模板(.vm)生成PDF文件

Java 使用iText和apache velocity模板(.vm)生成PDF文件,java,pdf,itext,velocity,xdocreport,Java,Pdf,Itext,Velocity,Xdocreport,使用iText和Java中的Apache Velocity模板文件(.vm)生成PDF的一般工作流是什么 我感兴趣的是了解以下步骤:解析模板文件、将Java对象放入上下文以及生成pdf的步骤等 我知道这是一个非常基本的问题。但我在网上找不到任何一个这样的例子。我发现了,但我也有兴趣知道其他的选择 请帮助我提供一些示例项目链接或至少是入门步骤。使用iText和Apache Velocity模板文件(.vm)直接在Java中生成PDF是不可能的,因为: PDF是二进制格式 Velocity生成纯文

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

我感兴趣的是了解以下步骤:解析模板文件、将Java对象放入上下文以及生成pdf的步骤等

我知道这是一个非常基本的问题。但我在网上找不到任何一个这样的例子。我发现了,但我也有兴趣知道其他的选择


请帮助我提供一些示例项目链接或至少是入门步骤。

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

  • PDF是二进制格式
  • Velocity生成纯文本内容
换句话说,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从使用Velocity的docx模板生成pdf的过程:

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

    为了将其转换为另一种格式,XDocReport提供了一个基于apachepoi和iText的docx-To-pdf转换器。这里介绍了XDocReport将docx转换为pdf的过程:

  • 用apachepoi加载docx
  • 循环POI的每个结构(XWPFParagraph等),以创建iText结构(iText段落)
  • 请注意,XDocReport是模块化的,您也可以使用其他转换器。

    是的,您可以。 这完全取决于您希望PDF的复杂程度

    以下是基本功能的步骤

  • 使用Apache Velocity模板文件(.vm)生成HTML文件
  • 使用
    com.itextpdf.text.html.simpleparser.HTMLWorker
    (已弃用)将该html文件解析/转换为PDF
  • 此外,您可以使用
    com.itextpdf.text.pdf.PdfCopy.PageStamp
    向现有pdf添加内容(边框、戳记、注释等)

  • 还有
    com.itextpdf.tool.xml.XMLWorker
    用于更高级的HTML转换(添加样式表等)

    首先,我们使用freemarker模板生成HTML文件,然后通过IItextRender将HTML呈现为pdf文件。最后,我们可以在浏览器中查看pdf文件,有一个非常有用的javascript工具称为pdfjs。也许您可以试试。

    XDocReport有什么限制?是否可以在xdcoreport中设置pdf文件的编辑密码?我指的是iText.Hi@Angelo中的PDFWriter.setEncryption方法,在这里添加了一个问题:。请看一看。