当前位置: 首页 > news >正文

Java 使用 itextpdf 自定义 生成 pdf

Java 使用 itextpdf 自定义 生成 pdf

  • maven 依赖
  • 实现
  • docker 服务 字体文件找不到问题

maven 依赖

<!-- iText 7 -->
<dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.3</version><type>pom</type>
</dependency>
<!-- fastjson2 -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson2</artifactId><version>2.0.28</version>
</dependency>

实现

    /*** 生成pdf文档* @param data* @param file* @throws IOException*/public static void generatePDF(JSONObject data, File file,String path) throws IOException {// 创建 PDF 文档PdfWriter writer = new PdfWriter(file);PdfDocument pdfDoc = new PdfDocument(writer);Document document = new Document(pdfDoc);// 从 Redis 中加载字体/*PdfFont simkaiFont = fontUtil.loadFontFromRedis(RedisKeyConstant.FONT + ":simkai");PdfFont simsunFont = fontUtil.loadFontFromRedis(RedisKeyConstant.FONT + ":simsun");PdfFont stzhongsFont = fontUtil.loadFontFromRedis(RedisKeyConstant.FONT + ":stzhongs");*/// 自定义字体文件 path 文件父文件夹PdfFont simkaiFont = PdfFontFactory.createFont(path + "simkai.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);PdfFont simsunFont = PdfFontFactory.createFont(path + "simsun.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);PdfFont stzhongsFont = PdfFontFactory.createFont(path + "stzhongs.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);// 设置边距document.setMargins(42.7f, 38f, 42.7f, 38f); // 上、右、下、左边距// 添加法院名称Paragraph courtLevel = new Paragraph(data.getString("court_level")).setFont(stzhongsFont) // 华文中宋.setFontSize(22)       // 二号字.setFontColor(DeviceRgb.BLACK)  // 黑色字体.setMultipliedLeading(1.5f)     // 1.5倍行距.setMarginTop(10)               // 段前间距.setTextAlignment(TextAlignment.CENTER); // 居中对齐document.add(courtLevel);// 添加页眉页脚pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));// 添加判决书类型Paragraph caseType = new Paragraph(getCaseTypeText(data)).setFont(stzhongsFont)        // 华文中宋.setFontSize(26)              // 一号字.setFontColor(DeviceRgb.BLACK) // 字体颜色为黑色.setMultipliedLeading(1.5f)   // 1.5倍行距.setTextAlignment(TextAlignment.CENTER); // 居中对齐document.add(caseType);// 添加页眉页脚pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));// 添加案号Paragraph caseId = new Paragraph(data.getString("case_id")).setFont(simkaiFont)                // 设置字体为楷体.setFontSize(15)                    // 小三字号.setFontColor(DeviceRgb.BLACK)      // 字体颜色为黑色.setFixedLeading(24)                // 固定行距 24磅.setMarginTop(12)                   // 段前一行(24磅,等于固定行距).setMarginBottom(24)                // 段后一行(24磅,等于固定行距).setTextAlignment(TextAlignment.RIGHT); // 右对齐document.add(caseId);// 添加页眉页脚pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));// 添加内容段落List<String> contentList = JsonUtil.getList(data, "content", String.class);float indent = 15 * 2;for (String content : contentList) {Paragraph contentPara = new Paragraph(content).setFont(simkaiFont)                // 设置字体为楷体.setFontSize(15)                    // 小三字号.setFontColor(DeviceRgb.BLACK)      // 设置字体颜色为黑色.setFixedLeading(24)                // 设置固定行距为24磅.setFirstLineIndent(indent)         // 设置首行缩进为2个字符.setMultipliedLeading(1.5f)   // 1.5倍行距//.setWidth(300.51f)                  // 设置每行宽度.setTextAlignment(TextAlignment.LEFT); // 左对齐document.add(contentPara);// 添加页眉页脚pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));}// 添加落款内容List<String> signatureList = JsonUtil.getList(data, "signature", String.class);for (String signature : signatureList) {Paragraph signaturePara = new Paragraph(signature).setFont(simkaiFont)                // 设置字体为楷体.setFontSize(15)                    // 小三字号.setFontColor(DeviceRgb.BLACK)      // 设置字体颜色为黑色.setFixedLeading(24).setTextAlignment(TextAlignment.RIGHT); // 右对齐document.add(signaturePara);// 添加页眉页脚pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));}// 添加页眉页脚pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));// 关闭文档document.close();}

docker 服务 字体文件找不到问题

  服务名:   # 我这里是微服务 整合了 docker-composebuild:dockerfile: # Dockerfile 位置context: .image: 镜像名container_name: 容器名environment:JVM_PARAM: ${JVM_PARAM} # jvm启动参数BOARDING_HOST_IP: ${BOARDING_HOST_IP} # 宿主机IPBOARDING_HOST_PORT: ${BOARDING_HOST_PORT} # 宿主机IPrestart: alwaysports: # 端口映射- "${BOARDING_HOST_PORT}:${BOARDING_HOST_PORT}"volumes: # 数据卷  挂载文件目录- /home/fonts:/usr/local/fonts

http://www.mrgr.cn/news/57006.html

相关文章:

  • 如何让别人喜欢你的代码
  • 掌握ElasticSearch(三):探索核心概念——文档、索引、分片、倒排索引
  • 分布式介绍
  • matlab imread函数
  • python从0快速上手(十六)小游戏开发
  • 人工智能(四)-大模型搭建
  • javascript实现aes算法
  • Ping32:企业级防泄密能力的强大守护者
  • Windows API --- Unicode简介 2.1
  • python--pyQt 单选按钮控件 -QRadioButton
  • Java面试题库——网络编程
  • 洛谷 P3130 [USACO15DEC] Counting Haybale P
  • 科大讯飞AI开发者大赛颁奖典礼,万码优才荣获前三甲!
  • vue项目中pinia和vuex的使用
  • Android 默认去掉URL网络校验,设置不进行网络校验
  • 代码工艺:写代码的好习惯
  • arco-design 自定义table和for循环自定义form-item并添加自定义校验
  • Linux系统基础-进程间通信(4)_模拟实现进程池
  • 智慧楼宇平台,构筑未来智慧城市的基石
  • 聊一聊电的产生和输送联接到桌面PDU插座的那些事儿
  • Shiro授权
  • OpenHarmony4.0配置应用开机自启
  • 高效休息法
  • CSS背景
  • 【Java SE 】抽象类 和 接口 详解
  • 高标准农田信息化推动农业产业链升级