在工作中,有很多数据需要导出成PDF,比如账单、数据报表、简历等等。有很多方法可以做PDF的导出,JAVA就有很好的组件可以做这个事情。可以根据项目做不同的选择,下面我们简单探讨一下。
常用的导出方法对比
调研对
常用PDF导出方法
调研对象
优点
缺点
分页
图片
jsPDF
1
、整个过程在客户端执行
(
不需要服务器参与
)
,调用简单
1
、生成的
pdf
为图片形式,且内容失真
支持
支持
iText
1
、功能基本可以实现,比较灵活
2
、生成
pdf
质量较高
1
、对
html
标签严;格,少一个结束标签就会报错;
2
、后端实现复杂,服务器需要安装字体;
3
、图片渲染比较复杂
(
暂时还没解决
)
支持
支持
wkhtmltopdf
1
、调用方式简单
(
只需执行一行脚本
)
;
2
、生成
pdf
质量较高
1
、服务器需要安装
wkhtmltopdf
环境;
2
、根据网址生成
pdf,
对于有权限控制的页面需要在拦截器进行处理
支持
支持
goPdf
1.
可以用
Golang
实现
pdf
的生成
1.
后端为
golang
写的服务;
2.
需要开发者实现所有元素的绘制,代码量大、容易出错、不够灵活
支持
支持
html2canvas+jsPDF
原理是利用
html2canvas
遍历页面中的
dom
节点,渲染成
canvas image
,
再用
jsPDF
把
canvas image
转化为
pdf
,
最后转化的
pdf
的内容都是图片形式,类似于把整个网页截图、切割,再一页一页拼接成一个完整的
pdf
。
这种方法的优点是所有的过程都由
js
在客户端完成,不需要依赖服务器。
目前发现的两个比较明显的缺点:
1
、生成的
pdf
质量不高,失真比较严重
;
2
、
在分页处如果有图片的话,不会自动识别隔页处理(甚至一行文字也能给你上下一分为二),图片也会很容易被一分为二
iText
iText
是一个第三方报表
java
插件,可以在后端利用
java
随意生成、转化
pdf
文件,提供了很多
api
,
比较灵活。
需要注意的是:
1
、如果页面中有中文,服务器端需要下载字体库
simsun.ttc
,
在后台进行引用,同时在页面的样式中加入对应字体的定义
2
、页面中如果有图片,如果图片引用是绝对路径或者
base64
则不用考虑,如果是相对路径,需要在后台用
renderer.getSharedContext
().
setBaseURL
("
图片绝对路径目录
");
来指定图片路径,否则图片无法渲染。
3
、要转化的页面必须是标准的
XHTML
页面,有一处不符合规范就会报错
wkhtmltopdf
wkhtmltopdf
是一个可以把
html
转为
pdf
的插件,有
windows
、
linux
等平台的版本,最大的特点就是使用简单,语言无关性
使用方法:
wkhtmltopdf
https://www.baidu.com/
feishu.pdf
注意:需要按照插件
为什么要选择
wkhtmltopdf
1. 可以使用
html
模版作为页面的基础框架
2. 可以比较容易的把数据灌入
html
模版
3. 对于
html
修改比较灵活,颜色及样式比较容易修改与构建
比如Golang对于HTML模版支持的还是比较好的,可以把HTML模版定义成类似下面的格式:
<div class="item inline-block">
<h4>用户名:</h4>
<p>{{.UserName}}</p>
<div class="item inline-block">
<h4>密码:</h4>
<p>{{.Password}}</p>
下面的函数可以方便的读取Globalization的HTML模版,然后就可以调用wkhtmltopdf进行转换。
func GeneratePdf(locale string, data ExportData) ([]byte, error) {
ext := "html"
htmlTplName := utils.GetHtmlTemplatePath("use_info", ext, locale)
tmpl, err := template.ParseFiles(htmlTplName)
if err != nil {
return nil, err
buf := &bytes.Buffer{}
tmpl.Execute(buf, data)
return buf.Bytes(), nil
对于golang调用wkhtmltopdf,这里就不再阐述了,可以在github上搜一个库进行调用。(GitHub - lawenliu/wkhtmltopdf-go: Go wrapper for wkhtmltopdf, used to convert html pages to pdf.)
参考地址:LiveToolkit
在工作中,有很多数据需要导出成PDF,比如账单、数据报表、简历等等。有很多方法可以做PDF的导出,JAVA就有很好的组件可以做这个事情。可以根据项目做不同的选择,下面我们简单探讨一下。常用的导出方法对比调研对常用PDF导出方法 调研对象 优点 缺点 分页 图片 jsPDF 1、整个过程在客户端执行(不需要服务器参与),调用简单 ......
<button ng-click="generatePdf()">生成账单</button>
<div id="zero">HelloWorld</div>
<script src="static/libs/jsPDF-master/dist/jspdf.debug.js"></script>
<script src="static/libs/jsPDF-master/dist/jspdf.min.js">
export function downloadFile(fileName, content) {
const a = document.createElement('a');
const event = document.createEvent('MouseEvents');
const blo
1、打开网页链接,点击浏览器右上角的【设置】-【打印】,或者直接按【Ctrl+P】
2、选择【另存为PDF】-【保存】
3、【修改文件名称】为“推文发布日期+推文名称”-【保存】
4、pdf文件保存的地址位置
5、注意:PDF只能显示静态图片(jpg、png),不能保存视...