Java实现HTML转PDF

article/2025/9/11 17:25:38

Java实现HTML转PDF

  • 效果图
  • 一、添加maven依赖
  • 二、代码示例
  • 三、踩坑:
    • 1.simsun.ttc 文件找不到问题
    • 2.中文显示问题:
    • 3.  问题(当然不知这种问题 还有 >等一些特殊转义符号这里只罗列一种)

效果图

在这里插入图片描述上图是 html 效果图

生成PDF效果图如下:
在这里插入图片描述

一、添加maven依赖

<dependency>  <groupId>com.itextpdf</groupId>  <artifactId>itextpdf</artifactId>  <version>5.5.9</version></dependency>  <dependency>  <groupId>com.itextpdf.tool</groupId>  <artifactId>xmlworker</artifactId>  <version>5.5.9</version></dependency>  <dependency>  <groupId>com.itextpdf</groupId>  <artifactId>itext-asian</artifactId>  <version>5.2.0</version></dependency>  <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.0.3</version></dependency>

二、代码示例

java

package com.test;import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;/*** 文件格式转换工具类** @author lbj** 2015-10-8 上午10:52:22*/
public class FileTypeConvertUtil {/*** 将HTML转成PD格式的文件。html文件的格式比较严格* @param htmlFile* @param pdfFile* @throws Exception*/// <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">public static void html2pdf(String htmlFile, String pdfFile) throws Exception {// step 1String url = new File(htmlFile).toURI().toURL().toString();System.out.println(url);// step 2OutputStream os = new FileOutputStream(pdfFile);ITextRenderer renderer = new ITextRenderer();renderer.setDocument(url);// step 3 解决中文支持ITextFontResolver fontResolver = renderer.getFontResolver();if("linux".equals(getCurrentOperatingSystem())){fontResolver.addFont("/usr/share/fonts/chiness/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);}else{fontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);}renderer.layout();renderer.createPDF(os);os.close();System.out.println("create pdf done!!");}public static String getCurrentOperatingSystem(){String os = System.getProperty("os.name").toLowerCase();System.out.println("---------当前操作系统是-----------" + os);return os;}public static void main(String[] args) {//        String htmlFile = "/home/lbj/sign.jsp";//        String pdfFile = "/home/lbj/sign.pdf";String htmlFile = "d:/table.html";String pdfFile = "d:/testoone2.pdf";try {FileTypeConvertUtil.html2pdf(htmlFile, pdfFile);} catch (FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}

html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"/><title>表格样式</title><meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"/><link rel="stylesheet" href="https://static.loyalvalleycapital.com/web/css/frame.css"/><style>table.table-separate th{font-weight:bold;font-size:14px;border-top:1px solid #F3EDE9 !important;}table.table-separate td{padding: 13px 0;font-weight:100;}.table-separate td.tit{background-color: #f4f9fe;font-weight:normal;padding:22px 0;width:15%;}.table-separate td.cont{text-align: left;padding:16px 22px;width:85%;line-height:175%;}.table-separate.no-border th{border:none;text-align: left;}.table-separate.no-border td{text-align: left;border:none;}table {border-collapse: collapse;table-layout: fixed;word-break:break-all;font-size: 10px;width: 100%;text-align: center;}td {word-break:break-all;word-wrap : break-word;}@page {size:210mm 297mm;//纸张大小A4margin: 0.25in;-fs-flow-bottom: "footer";-fs-flow-left: "left";-fs-flow-right: "right";padding: 1em;}#footer {font-size: 90%; font-style: italic;position: absolute; top: 0; left: 0;-fs-move-to-flow: "footer";}#pagenumber:before {content: counter(page);}#pagecount:before {content: counter(pages);}
</style>
</head>
<body class="bg-white pb-3"  style = "font-family: SimSun;"><div id="footer" style="">  Page <span id="pagenumber"/> of <span id="pagecount"/> </div>
<div style="max-width:600px;margin:0 auto;padding:10px;"><div class="f18 text-center mv-2 bold">合伙人服务日报</div><div class="f14 text-center mb-3">2017年8月28日</div><div class=""><div class="f14 mb bold">一、旗舰基金股东动态</div><div class="f14 mb">1、旗舰基金公司新闻</div><table class="table-separate"><tbody><tr><td class="tit" valign="middle">刚泰</td><td class="cont"><p class="bold">&nbps;第 3 期员工持股计划(草案)摘要</p><p>1、甘肃刚泰控股(集团)股份有限公司(以下简称“公司”)第3期员工持 股计划(以下简称“第3期员工持股计划”)根据《中华人民共和国公司法》、《中华人民共和国证券法》、《关于上市公司实施员工持股计划试点的指导意见》 及其他有关法律、法规、规范性文件以及《甘肃刚泰控股(集团)股份有限公司章程》的规定制定,遵循公平、公正、公开的原则,旨在完善公司的激励机制,确保公司未来发展战略和经营目标的实现。</p><p>4、第3期员工持股计划以“份”作为认购单位,每份份额为1元,起始认购 份数为100万份,超过100万份的,以10万份的整数倍累积计算。公司全部员工 持股计划涉及的股票数量累计不超过公司现有股本总额的10%,任一持有人持有的 员工持股计划份额所对应的标的股票数量不超过公司股本总额的 1%(不包括员工 在公司首次公开发行股票上市前获得的股份、通过二级市场自行购买的股份及通过股权激励获得的股份)。</p></td></tr></tbody></table><div class="f14 mt-3 mb bold">一、客户沟通和反馈</div><div class="f14 mb">今天联系的客户:</div><div class=""><table class="table-separate"><thead><th>联系人</th><th>沟通内容</th><th>客户反馈</th></thead><tbody><tr><td>XXX</td><td>XXX</td><td>XXX</td></tr><tr><td>XXX</td><td>XXX</td><td>XXX</td></tr></tbody></table></div><div class="f14 mt-3 mb bold">三、官网、微信和客户服务系统变化</div><div class=""><table class="table-separate"><tbody><tr><td class="tit" valign="middle">运营</td><td class=""><p class="bold">XXX</p></td><td class="text-left pl-2"><p>· 上海正心公益基金会正式获批 1727 </p><p>· XXXX</p></td></tr></tbody></table></div><div class="f14 mt-3 mb bold">四、其他工作</div><div class="f14 mb">近期过生日的客户有: </div><div class=""><p>8.27 王军</p><p class="bold">8.27 陈鱼海</p></div></div>
</div></body>
</html>

三、踩坑:

1.simsun.ttc 文件找不到问题

windows 自带有这个文件 。linux下可能会出现字体找不到的问题。解决方法如下:

  1. 步骤1.在Windows系统中C:\Windows\Fonts目录下找到宋体,复制在桌面后为simsun.ttc
    在这里插入图片描述在这里插入图片描述

  2. 登录Linux服务器进行配置。在/usr/share/fonts/目录下创建chinese文件夹并把simsun.ttc放在chinese文件夹里
    如下
    在这里插入图片描述

  3. 编辑配置文件。在/etc/fonts/目录下找到fonts.conf文件并添加

<dir>/usr/share/fonts/chinese</dir>

在这里插入图片描述

  1. 在/etc/fonts目录下执行刷新命令
//没有该命令则通过 yum search fontconfig 进行安装
fc-cache
  1. 查看是否安装成功
fc-list :lang=zh

在这里插入图片描述

2.中文显示问题:

在这里插入图片描述这里很奇怪为什么引入了 中文字体为什么还是不能显示中文?

这里要注意了:要再你的html 加上一个样式:

style = “font-family: SimSun;”
在这里插入图片描述这样加了之后就会出现中文了。。

3.  问题(当然不知这种问题 还有 >等一些特殊转义符号这里只罗列一种)

在这里插入图片描述
当文中出现这种字符的时候 会报错:
在这里插入图片描述因为这个HTML 转PDF 对html代码规范要求非常严格所以这里的头部必须声明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

以及其他的都要加</>结束
在这里插入图片描述
4.这里出现这样一个问题:
在这里插入图片描述
html 中这个换行是OK 的 但是转完PDF之后 是这种情况:
解决办法如下:

添加样式:

table {border-collapse: collapse;table-layout: fixed;word-break:break-all;font-size: 10px;width: 100%;text-align: center;}td {word-break:break-all;word-wrap : break-word;}

完美解决了!!

效果图:
在这里插入图片描述
另外这里还涉及到分页的情况以及纸张大小设置

@page {size: 7in 15.25in;}

这里是设置A4 纸张

body里加入<div id="footer" style="">  Page <span id="pagenumber"/> of <span id="pagecount"/> </div>
样式上加入
@page {
size:210mm 297mm;//纸张大小A4
margin: 0.25in;
-fs-flow-bottom: "footer";
-fs-flow-left: "left";
-fs-flow-right: "right";
border: thin solid black;
padding: 1em;
}
#footer {
font-size: 90%; font-style: italic;
position: absolute; top: 0; left: 0;
-fs-move-to-flow: "footer";
}
#pagenumber:before {
content: counter(page);
}
#pagecount:before {content: counter(pages);
}

代码:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/H3xA2F8N.shtml

相关文章

【html转pdf】html页面导出为pdf文件,纯html版本,简单实现pdf转换【html2canvas+jspdf】

前言 最近遇到的需求&#xff0c;把html转成pdf文件下载导出。 目前网上看了下&#xff0c;有三种方法&#xff0c;但是其中两种需要后端配合 一种是纯前端实现的&#xff0c;比较简单。所以就使用了这种。 也就是html2canvas jspdf 的这种方法 这种方法实现的思路就是&#…

HTML页面导出为PDF(JSPDF、ITEXT、WKHTMLTOPDF)

html页面导出pdf&#xff0c;本来是一件很简单的事情&#xff0c;在浏览器直接打印(Mac快捷键为⌘p&#xff1b;Windows快捷键为ctrlp)&#xff0c;就可以把页面另存为pdf文件&#xff0c;但对于要经常把页面导出为pdf的用户来说并不友好&#xff0c;一个合格程序员的标准就是&…

html转pdf(总结五种方法Java)

html转pdf&#xff08;总结五种方法Java&#xff09; Java 实现html转pdf&#xff0c;总结五种方法。 推荐使用wkhtmltopdf,Itext 方法一&#xff1a;使用wkhtmltopdf 1、下载插件wkhtmltopdf https://wkhtmltopdf.org/downloads.html 2、本机测试 本目录下cmd进入 输入命…

Java 动态规划

Java中的动态规划 介绍 动态规划典型的被用于优化递归算法&#xff0c;因为它们倾向于以指数的方式进行扩展。动态规划主要思想是将复杂问题&#xff08;带有许多递归调用&#xff09;分解为更小的子问题&#xff0c;然后将它们保存到内存中&#xff0c;这样我们就不必在每次…

PDF如何转换成jpg图片

PDF文件转换成jpg&#xff0c;有些人一看到问题可能有点懵逼&#xff0c;其实就是PDF转换成图片了&#xff0c;只要转换器中的PDF转图片功能中图片格式支持jpg格式&#xff0c;就可以直接转换成jpg图片了&#xff0c;比如奥凯丰 PDF转换大师&#xff0c;支持PDF转jpg、PDF转png…

数据结构和算法Java实现(韩顺平)

目录 稀疏数组 队列 数组模拟队列思路 数组模拟环形队列 链表 单链表的翻转 单链表的逆序输出&#xff08;栈&#xff09; 双向链表 Jasephu 问题 栈 数组模拟 栈实现计算器 中缀表达式 计算器 逆波兰表达式 &#xff08;后缀表达式&#xff09; 中缀转后缀实现计算…

pdf文件转图片(java实现)

项目中pdf文件太大&#xff0c;在手机端打开缓慢。需要将pdf文件转换成图片。加载比较快&#xff0c;增加用户体验。话不多说&#xff0c;直接上干货。 一、在pom引入依赖的jar <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><dependency&g…

袋鼠云与中航金网达成战略合作并成立信创大数据联合实验室

当前&#xff0c;加快推进“新基建”已成为新形势下国家稳定经济发展的重要方针&#xff0c;而作为“新基建底座”的信创产业&#xff0c;有望成为未来中国十年科技发展的核心领域。纵观信创产业近五年发展&#xff0c;产品和技术已从“基本可用”向“好用易用”大跨步迈进&…

基于java实现PDF转图片图片合成PDF

平常在工作中&#xff0c;经常需要用到pdf转换成图片或者图片转换成pdf的功能。能将pdf转换成图片的工具比较多&#xff0c;比如wps就支持转换为图片&#xff0c;不过高清的转换需要开通会员才行&#xff0c;比较麻烦。免费的转换不光清晰度有问题&#xff0c;还存在水印等&…

《Java语言程序设计(第三版 沈泽刚)》编程练习2

编程练习 2 2.1 编写程序&#xff0c;从键盘上输入一个double类型的华氏温度&#xff0c;然后将其转换为摄氏温度输出。转换公式为&#xff1a; 摄氏度 &#xff08; 5 / 9 &#xff09;&#xff08;华氏度 − 32 &#xff09; 摄氏度&#xff08;5/9&#xff09;&#xff08…

PDF怎么转换成jpg图片保存?简单几步就能解决。

在我们的日常工作和生活中&#xff0c;我们经常会和别人在线传输各种文件。但是在传输Word文档、Excel表格、PPT等格式的文件时&#xff0c;文件内容排版和布局容易出现变化。因此&#xff0c;人们在传输文件时一般都将文件转换为PDF&#xff0c;但PDF文件在手机上观看并不方便…

pdf如何转换成jpg图片?

pdf如何转换成jpg图片&#xff1f;PDF&#xff08;Portable Document Format&#xff09;是一种常见的文件格式&#xff0c;由Adobe Systems创建。与其他文档格式相比&#xff0c;它具有固定页面布局和跨平台兼容性等优点&#xff0c;因此广泛应用于电子书、论文、技术手册、合…

PDF怎么转换成jpg图片

PDF怎么转换成jpg图片&#xff1f;在日常工作中&#xff0c;PDF文件是一种非常常用的格式类型。文件存储安全性高&#xff0c;可以保护用户文件的内容&#xff0c;文件的转换也很方便。支持多种文件类型&#xff0c;可自由切换。有的朋友还是比较习惯查阅图片格式的内容&#x…

动态规划(Java)

文章目录 前言一、背包问题二、字符串转化问题三、纸牌问题四、最少贴纸数总结 前言 动态规划的目的就是避免重复计算&#xff0c;在暴力递归的过程中若在计算过程中产生了重复计算那么就可以进行动态规划的优化。以空间换时间&#xff0c;可以根据暴力递归的过程写出动态规划…

袋鼠云与中航金网达成战略合作,成立信创大数据联合实验室

当前&#xff0c;加快推进“新基建”已成为新形势下国家稳定经济发展的重要方针&#xff0c;而作为“新基建底座”的信创产业&#xff0c;有望成为未来中国十年科技发展的核心领域。纵观信创产业近五年发展&#xff0c;产品和技术已从“基本可用”向“好用易用”大跨步迈进&…

北京市委书记蔡奇调研 PingCAP 立足自主研发和开源战略,助推产业数字化转型

2021 年 3 月&#xff0c;开源正式被列入国家十四五规划发展纲要&#xff0c;可以预期&#xff0c;开源将成为中国未来发展基础软硬件技术的关键路径。**3 月 23 日上午&#xff0c;北京市委书记蔡奇一行参观考察 PingCAP&#xff08;平凯星辰&#xff09;&#xff0c;专题调研…

如何把pdf转成图片?

怎么把pdf转成图片&#xff1f;作为上班族&#xff0c;能熟练的使用各种办公软件是职场必备技能&#xff0c;特别是在处理各种类型的文件时候&#xff0c;如果能熟练的将文件格式进行相互转换&#xff0c;那不仅能提升自己的工作效率&#xff0c;也会方便跟自己对接工作的人。就…

袋鼠云与沃趣科技达成战略合作,共同驱动企业数字化升级

12月3日,袋鼠云与沃趣科技正式达成战略合作,并于袋鼠云总部举行签约仪式。沃趣科技创始人&CEO 陈栋、联合创始人&CTO 李建辉、合伙人&总裁 郭华、技术中心负责人 魏兴华,袋鼠云创始人&董事长 陈吉平、联合创始人&CEO 徐进挺、联合创始人&易知微CEO 宁海…

袋鼠云陈吉平:深耕国产自研数字化技术与服务,持续为客户创造价值

在经济面临下行压力、疫情反复等不确定因素之下&#xff0c;推动数字化转型就成为了许多企业的“救命稻草”。然而&#xff0c;较高的数字化转型门槛、不成系统的数据服务&#xff0c;以及缺乏规范的行业标准等都成了企业数字化转型路上的“绊脚石”。 ​ 2015年&#xff0c;…

陈吉平-阿里巴巴离职DBA在35岁总结的职业生涯

导读&#xff1a;去年很多朋友私下或新浪微博上在总结自己的职业生涯与职业规划&#xff0c;也感觉到很纠结与彷徨&#xff0c;尤其技术人的职业生涯&#xff0c;随年龄增加&#xff0c;一些优势逐渐丧失。4月 13 日数据库技术大会的主办方举行的晚宴上&#xff0c;也让本人支持…