Ⅰ 《html转pdf-----wkhtmltopdf踩坑总结》
最近公司给了个任务,差不多的流程就是接受json数据,然后最后生成图片。我想的办法是根据json数据生成html然后转成pdf。使用的语言是python。然后具体来说使用的工具就是使用python名为pdfkit的库去调用基于webkit的wkhtmltopdf。
目前来说html转pdf最主流的程序就是wkhtmltopdf,但是坑还是挺多的而且网上资源不是很丰富,所以写一篇踩坑总结。
##1. 无法读取本地文件
显示在html上好好的本地图片,到了pdf上就读取不出来,但是来源于网络(给一个url)的图片却能完美读出来。
后来发现,原来在上一个版本0.12.5是可以读取的,到了0.12.6不能读取了是因为其中的一个参数--enable-local-file-access变为了非默认。在python中改这个参数的方法是
然后再在后续调用wkhtmltopdf中加载这个option(我一开始想的是把value改成True,结果一直报错,吐了)
##2. 无法解析latex格式的公式
在html使用了MathJax提供的js去解析latex格式的数学公式,在html界面可以完美显示,但是到了pdf中就解析不了,然后我以为是没有添加'enable-javascript'的问题。结果加上之后还是不行。然后我发现又有一个参数叫做'no-stop-slow-scripts'的参数,可以等到js运行完毕之后再进行pdf的转化。结果还是不行。
然后我就在想会不会js在运行的时候出了什么问题,加上了'debug-javascripts'的参数。果然发现在调用MathJax提供的链接的时候发现这个链接已经过期了(我也不知道为啥过期了在html界面还能完美展示。。。),把js里的链接换成了
https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
完美解决
##3. 部分css失效
css3中的flex全部失效,所以大家得换一下!
当时遇到了一个讲的很好的博客,给大家分享一下,然后再放一个官方文档的链接
博客:https://www.jianshu.com/p/4d65857ffe5e
官方文档:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
Ⅱ java将html文件转成pdf
核心代码如下
package com.hmkcode;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.html2pdf.HtmlConverter;
public class App {
public static final String HTML = "<h1>Hello</h1>"
+ "<p>This was created using iText</p>"
+ "<a href='hmkcode.com'>hmkcode.com</a>";
public static void main( String[] args ) throws FileNotFoundException, IOException
{
HtmlConverter.convertToPdf(HTML, new FileOutputStream("string-to-pdf.pdf"));
System.out.println( "PDF Created!" );
}
}
Ⅲ 镐庝箞鎶婄绣椤垫枃瀛楄浆鎹㈡垚PDF鏂囦欢
銆 1銆銆瀹夎匒dobe Acrobat钖庝细榛樿ゅ湪IE娴忚埚櫒涓娣诲姞PDF宸ュ叿镙忋
銆銆璇ュ伐鍏峰彲浠ユ柟渚跨殑灏嗙绣椤佃浆鍖栨垚PDF鏂囨。锛屾垨钥呮坊锷犲叆宸叉湁镄凯DF鏂囨。锛孉dobe PDF Explorer宸ュ叿镙忓垯鍙浠ュ湪IE镄勬敹钘忓す鐣岄溃鍐呯$悊window鍐呯殑HTML鏂囨。涓嶱DF鏂囨。镄勮浆鍖栥
2銆佸畨瑁呭崟镫镄刾df铏氭嫙镓揿嵃链猴纸pdffactory銆乽ltra pdf绛夛级锛岄氲繃缃戦〉镄勬墦鍗板姛鑳借浆鎹銆
3銆銆浣跨敤瀹㈡埛绔杞浠禜TML2PDF_Pilot銆
銆銆HTML2PDF_Pilot镄勬埅闱㈠备笂锲撅纴寰堢亩娲併
銆銆濡傛灉鍙鏄瑕佸畬鎴愭渶绠鍗旷殑宸ヤ綔鍙闇濡傜澶存墍绀猴纴镣瑰嚮涓婃柟镄勬坊锷犳寜阍娣诲姞HTML鏂囨。铹跺悗镣瑰嚮杞鎹锛岀◢绛夋棦鍙浠ュ畬鎴愪竴涓狧TML鏂囨。镄勮浆鍖栧伐浣溿
銆銆涓ょ嶆柟娉旷殑姣旇缉
銆銆𨱔垫椿镐э细
銆銆PDF宸ュ叿镙忕殑鏂瑰纺鐩告瘆瀹㈡埛绔镄勬柟寮忚佺伒娲昏稿氥
銆銆鍦ㄤ娇鐢ㄧ殑杩囩▼涓鍙戠幇HTML2PDF_Pilot涓嶈兘阃氲繃URL(缃戝潃)鐩存帴杞鍖朠DF鏂囨。锛岃屽伐鍏锋爮鍙闇鍦ㄦ祻瑙堢殑杩囩▼闅忔剰浣跨敤銆
銆銆锷熻兘锛氥銆鍦ㄥ姛鑳界殑鐜鑺备笂锛屽㈡埛绔鏂瑰纺镄凥TML2PDF_Pilot灏辨槑鏄捐佹瘆PDF宸ュ叿镙忚佸己澶ц稿
銆銆宸ュ叿镙忓彧鎻愪緵浜嗘渶锘烘湰镄勪缭瀛桦拰娣诲姞鍏ュ凡链夋枃妗g殑锷熻兘锛岃孒TML2PDF_Pilot鍒欐彁渚涗简镟翠负涓板瘜镄勯夐”銆
銆銆鍙﹀栵纴濡傛灉闇瑕佹壒閲忚浆鍖栫绣椤垫枃浠剁殑璇濓纴宸ュ叿镙忕殑鏂瑰纺涔熸棤娉曟彁渚涘瑰簲镄勫姛鑳姐
銆銆鍏跺疄杩樻槸链夊緢澶氩彲浠ラ夋嫨镄勬柟寮忥纴姣斿傛妸缃戦〉杞鍖栦负WORD镄勬枃浠舵牸寮忕劧钖庨氲繃WPS杞浠舵潵杞鍖栨枃妗g瓑锛屽彧瑕佽兘𨱔垫椿杩愮敤锛宧tml鏂囦欢杞琍DF鏄闱炲父绠鍗旷殑浜嬫儏銆
Ⅳ 前端html数据生成pdf,要给后端传什么路径
前端通过传递给后端html_url,由后端服务器获取html文件进行渲染,生成pdf,然后将pdf上传云上服务器。根据发布的相关信息查询到,云上服务器存储html,前端通过传递给后端html_url,由后端服务器获取html文件进行渲染,生成pdf,然后将pdf上传云上服务器。选择pyppeteer,有如下依据,python官方库如xhtml2pdf只能处理类似富文本类的静态页面,而html需要js渲染,故借助浏览器是一种可行的实现方式,tornado是异步框架,pyppeteer是异步库匹配。
Ⅳ 如何把网页变成pdf
1,请选择“文件”>“创建”>“从网页创建 PDF”。
2,输入完整的网页路径,或者单击“浏览”并找到 HTML 文件。
3,要更改网站中要转换的层的数量,请展开“捕捉多级”。输入要包括的层数,或者选择“获取整个网站”以包括网站的所有层。
4.如果选择了“仅获取 N 层”,请选择下面的一个选项,或同时选择两个选项:
停留在同一路径: 仅下载从属于指定 URL 的网页。
停留在同一服务器 : 仅下载储存在同一服务器上的网页。
5.单击“设置”,根据需要,在“网页转换设置”对话框中更改选择的选项,然后单击“确定”。
6.单击“创建”。
7,如果关闭了“下载状态”对话框,请选择“工具”>“文档处理”>“网页捕捉”>“将状态对话框置于前面”以再次显示此对话框。
Ⅵ 如何将网页转换成pdf
word实现法
1这里推荐使用的word版本为word2007或者2010版本。word2003的效果可能跟原来的网页会有差别
2首先,我们拖拽鼠标,选择网页中我能需要保存成文档的内容。右击选择复制
3打开一个新建的word文档命名为“网络一下,你就知道”。右击鼠标,选择保留原格式粘贴
4点击保存按钮。点击文件,打印。在打印机位置选择PDF。点击打印
5在新弹出页面选择保存路径,点击保存即可
6当然,除了第四个步骤这种方法以外,我们也可以右击word文档,选择转化为PDF。我们下了来讲第二种方法
END
网页转化法
1在打开的网页中,一次点击文件,另存为。总之找到可以保存网页的命令按钮,点击保存网页
2在弹出保存菜单中选择保存类型为“网页,仅HTML”选项,点击保存。
3好了,现在找到我们的网页文件,右击选择转化为Adobe PDF 即可。O(∩_∩)O哈哈~
END
直接PDF法
如果你现在打开的网页不是使用IE浏览器的话,复制网页地址到IE浏览器打开。我们以网络首页为例
由于现在的IE制作的比较简约,一些工具比如PDF我们都看不到它们了。所以在窗口最上方的空白处右击,把PDF按钮调出来
然后在弹出的窗口IE会问是否允许加载,点击启用
然后我们发现在浏览器右上角出现了两个PDF按钮图标
点击转换按钮,马上我们的页面就转化为PDF格式文档可以保存了。如果点击【选择】按钮的话,我们需要拖拽鼠标选择需要转化的对象或元素,再点击转换按钮完成转换
来看看我们最后转化完成的文档。后一个图是PDF文档的效果
END
注意事项
第二第三种的方法是最快最好的方法
Ⅶ java怎么把HTML界面做成pdf格式打印
public boolean convertHtmlToPdf(String inputFile, String outputFile)
throws Exception {
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
String url = new File(inputFile).toURI().toURL().toString();
renderer.setDocument(url);
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//解决图片的相对路径问题
renderer.getSharedContext().setBaseURL("file:/D:/");
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
return true;
}
上面这段代码是这样的,输入一个HTML地址URL = inputFile,输入一个要输出的地址,就可以在输出的PDF地址中生成这个PDF。