返回

Thymeleaf 与 Wkhtmltopdf 的完美合作助力 PDF 生成

后端

Thymeleaf 和 Wkhtmltopdf:Java 开发中的 PDF 生成利器

模板引擎和 PDF 生成的重要性

在当今的网络开发中,模板引擎和 PDF 生成的重要性日益凸显。对于 Java 开发者来说,Thymeleaf 和 Wkhtmltopdf 这两个强大的工具提供了快速、高效的 PDF 生成解决方案。

Thymeleaf:灵活的数据驱动模板引擎

Thymeleaf 是一款功能强大的模板引擎,因其灵活性、易用性和强大的语法而备受青睐。它允许开发者无缝地将数据与 HTML 模板相结合,生成动态且可定制的 Web 内容。

Wkhtmltopdf:将 HTML 转换为高质量 PDF

Wkhtmltopdf 是一款跨平台 HTML 转 PDF 工具,能够将 HTML 文档无缝转换为高质量的 PDF 文件。它支持广泛的操作系统,并提供丰富的控制选项,使开发者能够自定义 PDF 输出的外观和布局。

Thymeleaf 和 Wkhtmltopdf 的联手:强强联合

将 Thymeleaf 和 Wkhtmltopdf 结合使用,开发者可以轻松地生成数据驱动的 PDF 文档。此组合适用于需要创建发票、账单、报告或电子书等可打印文档的场景。

应用场景

发票和账单生成

Thymeleaf 可用于构建发票和账单模板,将数据从数据库填充到模板中。然后,Wkhtmltopdf 将填充后的 HTML 文档转换为 PDF 文件,以便发送给客户。

报告生成

对于需要生成动态报告的场景,Thymeleaf 和 Wkhtmltopdf 也能派上用场。开发者可以从数据库或 API 中提取数据,使用 Thymeleaf 将数据填充到报告模板中,然后使用 Wkhtmltopdf 将其转换为 PDF 文件。

电子书生成

Thymeleaf 和 Wkhtmltopdf 也可用于生成电子书。开发者可以使用 Thymeleaf 构建电子书模板,将内容从数据库或 API 中填充到模板中,然后使用 Wkhtmltopdf 将其转换为 PDF 文件,以便在电子书平台上发布。

代码示例:使用 Thymeleaf 和 Wkhtmltopdf 生成 PDF 发票

import com.github.jknack.handlebars.Handlebars;
import com.github.jknack.handlebars.Template;
import com.github.jknack.handlebars.io.ClassPathTemplateLoader;
import com.github.jknack.handlebars.io.TemplateLoader;
import com.lowagie.text.pdf.PdfWriter;
import java.io.OutputStream;
import org.w3c.dom.Document;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xhtmlrenderer.pdf.PDFEncryptionUtility;
import org.xhtmlrenderer.pdf.OutputStreamProvider;

public class PdfInvoiceGenerator {

  public void generateInvoice(OutputStream outputStream, Invoice invoice) {
    TemplateLoader templateLoader = new ClassPathTemplateLoader();
    Template handlebarsTemplate = new Handlebars(templateLoader).compile("invoice");

    // 将发票数据填充到模板中
    Context context = new Context();
    context.put("invoice", invoice);

    String htmlOutput = handlebarsTemplate.apply(context);

    // 创建 XHTML 渲染器并设置输出提供程序
    ITextRenderer renderer = new ITextRenderer();
    OutputStreamProvider osProvider = new OutputStreamProvider(outputStream);
    renderer.setOutputStreamProvider(osProvider);

    // 创建 PDF 文档
    Document document = renderer.renderToDocument(htmlOutput);

    // 设置 PDF 加密(可选)
    if (invoice.isConfidential()) {
      String password = "secret";
      PDFEncryptionUtility.encryptDocument(document, password);
    }

    // 将 PDF 写入输出流
    PdfWriter.getInstance(document, outputStream);
  }
}

常见问题解答

1. Thymeleaf 和 Wkhtmltopdf 的优点有哪些?

  • Thymeleaf:灵活、易用、语法丰富,支持数据驱动的模板生成。
  • Wkhtmltopdf:跨平台支持、高质量输出、丰富的控制选项,实现 HTML 到 PDF 的无缝转换。

2. Thymeleaf 和 Wkhtmltopdf 如何一起工作?

Thymeleaf 用于构建数据驱动的 HTML 模板,Wkhtmltopdf 将填充后的 HTML 文档转换为高质量的 PDF 文件。

3. 哪些场景适合使用 Thymeleaf 和 Wkhtmltopdf?

生成发票、账单、报告、电子书等可打印文档的场景。

4. 使用 Thymeleaf 和 Wkhtmltopdf 生成 PDF 的步骤是什么?

  1. 使用 Thymeleaf 构建模板并填充数据。
  2. 使用 Wkhtmltopdf 将 HTML 文档转换为 PDF 文件。
  3. (可选)为 PDF 设置加密或其他控制选项。
  4. 将 PDF 写入输出流。

5. 是否有代码示例展示 Thymeleaf 和 Wkhtmltopdf 的用法?

见上文代码示例,展示了如何使用 Thymeleaf 和 Wkhtmltopdf 生成 PDF 发票。