html文件转换器pdf,html文件转pdf

产品中难免有需要在web上生成pdf并导出或下载的需求。当然解决方案可能很多,比如html转换成pdf, 或者做一个freemaker或word的模版,然后转换成pdf.

下面主要说说html转换成pdf的方案,毕竟使用html模版更方便直接。通常有以下两类解决方案:

server端转换成pdf;

web端通过第三方js插件转换;

server端转换html生成pdf

在服务器端转换通常用到的插件是iText. 但是iText对css的支持不好,不过有一个对iText封装后的开源插件flying-saucer就可以解决这个问题。

flying-saucer主要是通过读取html源码来生成pdf。因此,它对html的检查很严格,必须使用闭合标签,即" >"这种才是可识别的。

flying-saucer可以通过三种方式来转换html。

获得html静态文件路径;

读取html文件流;

获得html url链接。

下面来看看主要代码:

pom.xml

org.xhtmlrenderer

flying-saucer-pdf-itext5

9.1.1

GeneratePdf.java

...

ITextRenderer renderer = new ITextRenderer();

//url或者物理路径

renderer.setDocument("http://localhost:8080/report/templete");

ITextFontResolver fontResolver = renderer.getFontResolver();

//支持中文

if (System.getProperty("os.name").contains("Window")) {

fontResolver.addFont("C:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

} else {

fontResolver.addFont("/usr/share/fonts/win/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

}

renderer.layout();

renderer.createPDF(os);

...

demo.html

...

body {

font-family: SimSun;//支持中文

}

...

flying-saucer转换pdf有一个问题,就是如果html不能静态化,那么内容就没办法转换成pdf。比如html用了vue.js来绘制一些图表,这个是没法用flying-saucer来生成pdf的。

有一种解决方案就是给打开的html生成快照,然后将图片转换成pdf。这就是接下来介绍的web端转换html生成pdf。

web端转换html生成pdf

web端html转pdf就简单多了,可以直接通过jspdf来解决,它的主要方式就是html生成cavans然后再生成pdf。

主要代码如下:

demo.html

...

function export1(){

var pdf = new jsPDF('p','pt','a4');

pdf.addHTML(document.body,function() {

pdf.save('web.pdf');

});

}

...

export

...

这种方式会存在两个问题,

分辨率问题会导致生成的pdf质量不会很高;

内容自适应,可能会把连续的内容截断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值