导出数据为PDF方法

在工作中,有很多数据需要导出成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再用jsPDFcanvas 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的插件,有windowslinux等平台的版本,最大的特点就是使用简单,语言无关性

使用方法:

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>
<div class="item inline-block">
    <h4>密码:</h4>
   <p>{{.Password}}</p>
</div>

下面的函数可以方便的读取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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值