• java 生成 pdf,支持中文显示


    目录

    说明:

    1 pom

    2 java代码

    3 html



    ​​​​​​​说明:

    itextpdf + freemarker + html
    
    • iTextPDF(iText):iText 是一个用于创建和操作 PDF 文档的 Java 库。它提供了广泛的功能,可用于从头开始创建 PDF 文档、操纵现有的 PDF、添加内容等等。在您的用例中,您很可能使用 iTextPDF 来创建和格式化 PDF 文档本身。

    • FreeMarker(模板引擎):FreeMarker 是一种常用的基于 Java 的模板引擎,它允许您动态生成基于文本的输出(如 HTML、XML 和其他标记)。在您的示例中,您使用 FreeMarker 创建一个 HTML 模板,该模板作为 PDF 内容的基础。您可以使用 FreeMarker 在 HTML 模板中插入动态数据,从而更容易生成结构化的内容。

    • HTML(超文本标记语言):HTML 是用于创建网页的标准标记语言,而在这个上下文中,它还充当了 PDF 内容的模板。您创建一个 HTML 模板,其中包含您想要插入动态数据的占位符。FreeMarker 处理这个 HTML 模板,将占位符替换为实际数据,从而创建完整的 HTML 文档。

    在您具体的用例中,您以以下方式组合这些技术:

    1. 您创建一个 HTML 模板,使用 HTML 标记和占位符(用 ${} 包围的变量)作为 PDF 文档的结构和布局。

    2. 您使用 FreeMarker 处理 HTML 模板。您向 FreeMarker 提供数据模型(一个带有键值对的 Java 对象),FreeMarker 将 HTML 模板中的占位符替换为实际数据。

    3. 处理后的 HTML 内容,其中占位符被数据替换,然后用作 PDF 文档的内容。

    4. 最后,使用 iTextPDF 来生成 PDF 文档,基于处理后的 HTML 内容。iTextPDF 可以将 HTML 转换为 PDF,确保您的 PDF 文档保留在 HTML 模板中定义的结构和样式。

    这种组合允许您根据 HTML 模板和提供的数据,动态生成具有可变内容、布局和样式的 PDF 文档

    1 pom

    1. <dependency>
    2. <groupId>com.itextpdfgroupId>
    3. <artifactId>itextpdfartifactId>
    4. <version>5.5.13version>
    5. dependency>
    6. <dependency>
    7. <groupId>org.freemarkergroupId>
    8. <artifactId>freemarkerartifactId>
    9. <version>2.3.31version>
    10. dependency>
    11. <dependency>
    12. <groupId>org.jfreegroupId>
    13. <artifactId>jfreechartartifactId>
    14. <version>1.5.3version>
    15. dependency>
    16. <dependency>
    17. <groupId>org.xhtmlrenderergroupId>
    18. <artifactId>flying-saucer-pdf-itext5artifactId>
    19. <version>9.1.6version>
    20. dependency>

    2 java代码

    1. import com.itextpdf.text.pdf.BaseFont;
    2. import freemarker.template.Configuration;
    3. import freemarker.template.Template;
    4. import org.xhtmlrenderer.pdf.ITextRenderer;
    5. import java.io.FileOutputStream;
    6. import java.io.StringWriter;
    7. import java.util.HashMap;
    8. import java.util.Map;
    9. public class PdfGenerator {
    10. public static void main(String[] args) {
    11. try {
    12. // Step 1: Load FreeMarker template
    13. Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
    14. cfg.setClassForTemplateLoading(PdfGenerator.class, "/templates");
    15. Template template = cfg.getTemplate("PDFtemplate.ftl");
    16. // Step 2: Prepare data model
    17. Map dataModel = new HashMap<>();
    18. dataModel.put("title", "支持中文");
    19. // Step 3: Generate HTML content
    20. StringWriter stringWriter = new StringWriter();
    21. template.process(dataModel, stringWriter);
    22. String htmlContent = stringWriter.toString();
    23. // Convert HTML to PDF
    24. ITextRenderer renderer = new ITextRenderer();
    25. renderer.setDocumentFromString(htmlContent);
    26. renderer.getFontResolver().addFont("C:/windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    27. renderer.layout();
    28. renderer.createPDF(new FileOutputStream("output3.pdf"));
    29. System.out.println("PDF generated successfully.");
    30. } catch (Exception e) {
    31. e.printStackTrace();
    32. }
    33. }
    34. }
    PDFtemplate 在resource项目的 templates文件夹中
    中文显示:
    
    C:/windows/fonts/simsun.ttc
    windows自带字体,线上替换为自己的字体
    

    3 html
     

    1. html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    5. <meta http-equiv="Content-Style-Type" content="text/css"/>
    6. <title>title>
    7. <style type="text/css">
    8. body {
    9. font-family: SimSun;
    10. }
    11. .center {
    12. text-align: center;
    13. width: 100%;
    14. }
    15. .bold {
    16. font-weight: bold;
    17. }
    18. .custom-table {
    19. border: 1px solid #000000;
    20. }
    21. .custom-cell {
    22. border: 1px solid #000000;
    23. }
    24. style>
    25. head>
    26. <body>
    27. <h1 class="center">${title}h1>
    28. body>
    29. html>
    body {
        font-family: SimSun;
    }
    引入刚才的字体,显示中文
  • 相关阅读:
    监控电脑的软件叫什么丨科普小知识
    03.jvm常量池
    MES管理系统解决方案要帮助企业实现哪些目标
    在Jetson Nano上安装ncnn深度学习框架
    【leetcode】【剑指offer Ⅱ】045. 二叉树最底层最左边的值
    《省级国土空间规划编制技术规程》国家标准(GB/T 43214-2023)原文下载
    Python实现极限学习机回归模型(ELMRegressor算法)项目实战
    java里面i++和++i
    Python常用函数中NumPy的使用教程
    Java 垃圾收集器
  • 原文地址:https://blog.csdn.net/zzqtty/article/details/133859192