Java-模板生成PDF方式3-HtmlToPDF

  论坛元老 | 2023-6-6 16:03:03 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1868|帖子 1868|积分 5604

使用thymeleaf做html模板,由xhtmlrenderer/flying-saucer-pdf-openpdf将html转为PDF

LGPL 和 MPL 许可
pom.xml引入依赖
  1.         <dependency>
  2.             <groupId>org.springframework.boot</groupId>
  3.             <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4.             <version>2.5.5</version>
  5.         </dependency>
  6.         <dependency>
  7.             <groupId>org.xhtmlrenderer</groupId>
  8.             <artifactId>flying-saucer-pdf-openpdf</artifactId>
  9.             <version>9.1.20</version>
  10.         </dependency>
复制代码
yml增加配置
  1. spring:
  2.   thymeleaf:
  3.     cache: false
  4.     prefix: classpath:/templates/
  5.     suffix: .html
  6.     mode: HTML
  7.     encoding: UTF-8
复制代码
工具类转换
  1.     public void htmlToPDF(OutputStream outputStream, Message message, List<String> pickVolunteers, Map<String, List<DictData>> allVolunteers, List<DictData> volunteerTypes) throws IOException {
  2.         Context context = new Context();
  3.         context.setVariable("requestMessage", message);
  4.         buildApplicationType(message.getVolunteerType(),volunteerTypes);
  5.         context.setVariable("volunteerTypes",  volunteerTypes);
  6.         buildAllAvailableApp(pickVolunteers,allVolunteers);
  7.         context.setVariable("allVolunteers",  allVolunteers);
  8.         context.setVariable("yesConfirm",  true);
  9.         context.setVariable("noConfirm",  false);
  10.         // 模板数据转换
  11.         String htmlStr = templateEngine.process(TEMPLATE, context);
  12.         ITextRenderer renderer = new ITextRenderer();
  13.         SharedContext sharedContext = renderer.getSharedContext();
  14.         // 打印
  15.         sharedContext.setPrint(true);
  16.         // 互动
  17.         sharedContext.setInteractive(false);
  18.         // 设置中文字体
  19.         ITextFontResolver fontResolver = renderer.getFontResolver();
  20.         fontResolver.addFont(FONT_SIMHEI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
  21.         renderer.setDocumentFromString(htmlStr);
  22.         renderer.layout();
  23.         renderer.createPDF(outputStream);
  24.         renderer.finishPDF();
  25.     }
复制代码
HTML模板

applying_for_volunteer_service_form_html.html
资源

字体
src/main/resources/fonts/simhei.ttf
源码地址

https://gitee.com/cocoxike/pdfdemo.git
效果图


问题

1.中文显示
方法中加入字体
  1.         // 设置中文字体
  2.         ITextFontResolver fontResolver = renderer.getFontResolver();
  3.         fontResolver.addFont(FONT_SIMHEI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
复制代码
在html模板中需要中文的位置style增加字体设置
  1.         td {
  2.             font-family: SimHei;
  3.             height: 30px;
  4.             padding-left: 5px;
  5.             border: 1px solid #000;
  6.             border-collapse: collapse;
  7.         }
  8.         .table_style {
  9.             font-family: SimHei;
  10.             border: 1px solid #000;
  11.             border-collapse: collapse;
  12.             width: 650px;
  13.         }
复制代码
2.复选框checkbox显示并只读
  1. <input type="checkbox" readonly="readonly"  th:name="${yesConfirm}"th:checked="${yesConfirm}"/>是
复制代码
3.页脚
  1.        @page {
  2.             @bottom-center {
  3.                 margin-top: 1.5in;
  4.                 content: element(bottom-center);
  5.                 color:black;
  6.             };
  7.         }
  8.         .bottom-center {
  9.             margin-top: 0.1cm;
  10.             display: block;
  11.             width: 650px;
  12.             margin-left: 33px;
  13.             position: running(bottom-center);
  14.             border-top: 1px solid black;
  15.         }
  16. <footer >
  17.    学校名
  18.    xxx学校xx专业xxx志愿服务申请书 2023v1.0
  19. </footer>
复制代码
4.水平线
  1. <hr  align="center"/>
复制代码
5.图片使用base64格式(网上很多可以在线转换的)


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表