Python中如何将HTML文件转换为PDF
import pdfkit
pdfkit.from_url(‘http://www.sec.gov/Archives/edgar/data/1754581/000119312518361084/d620103df1.htm’,’/home/shenjianlin/out.pdf’)
这个链接是打开的是 html,现在我通过程序转成 pdf 但是现在转换过程中报错了,大家有没有更好的方法,谢谢
Traceback (most recent call last):
File “timeout.py”, line 3, in <module>
pdfkit.from_url(‘http://www.sec.gov/Archives/edgar/data/1754581/000119312518361084/d620103df1.htm’,’/home/shenjianlin/out.pdf’)
File “/usr/lib/python3.4/site-packages/pdfkit/api.py”, line 26, in from_url
return r.to_pdf(output_path)
File “/usr/lib/python3.4/site-packages/pdfkit/pdfkit.py”, line 153, in to_pdf
‘https://github.com/JazzCore/python-pdfkit/wiki/Using-wkhtmltopdf-without-X-server’ % stderr)
OSError: wkhtmltopdf: cannot connect to X server
You will need to run wkhtmltopdf within a “virtual” X server.
Go to the link below for more information
https://github.com/JazzCore/python-pdfkit/wiki/Using-wkhtmltopdf-without-X-server
Python中如何将HTML文件转换为PDF
chrome 打开,右键,打印,导出 pdf
用Python把HTML转PDF,最靠谱的方案是weasyprint,它直接解析HTML/CSS渲染成PDF,不需要浏览器环境。
先安装:
pip install weasyprint
基本用法很简单:
from weasyprint import HTML
# 直接转换HTML文件
HTML('input.html').write_pdf('output.pdf')
# 或者转换HTML字符串
html_content = '<h1>Hello PDF</h1><p>This is a test.</p>'
HTML(string=html_content).write_pdf('output.pdf')
如果你需要更复杂的控制,比如设置页面尺寸、边距:
from weasyprint import HTML
from weasyprint.formatting_structure import boxes
html = HTML('input.html')
pdf = html.write_pdf(
stylesheets=['custom.css'], # 添加额外CSS
presentational_hints=True, # 支持一些HTML属性
optimize_size=('fonts', 'images') # 优化文件大小
)
with open('output.pdf', 'wb') as f:
f.write(pdf)
另一个选择是pdfkit(基于wkhtmltopdf),但需要额外安装wkhtmltopdf,weasyprint是纯Python实现更省心。
总结:用weasyprint就对了。
wkhtmltopdf, pandoc, 还有个什么忘了,自己搜下吧,但是坑挺多的,不建议生产环境用,自己玩玩儿还是可以的
哦对了你这个 X server 指的是 x11
You will need to run wkhtmltopdf within a “virtual” X server.
Go to the link below for more information
https://github.com/JazzCore/python-pdfkit/wiki/Using-wkhtmltopdf-without-X-server
chrome 插件:Full Page Screen Capture
你这个更新到最新的 wkhtmltopdf,好像就可以了,这个我之前用过,需要 X server,但是服务器没有 X server,需要安装其他包才能解决,上次看的时候最新的 wkhtmltopdf 貌似自带了。
用 Chrome 的 headless 模式直接转换,无需 xserver
这玩意在生产环境中,还是比较坑比的,自己玩玩就算了,主要是在服务器上转 pdf 的速度比较慢,还经常报错,还有文件名中文的问题,反正之前用的时候,坑的一批,最后为了解决慢的问题,还重构了代码,ps:在自己电脑转的时候不算慢,但是到了服务器上真的慢。主要还是 X server 的问题
https://yq.aliyun.com/articles/601753
可以用阿里云函数计算搭一个服务
试一试虚拟打印机
如果用 python 的话,推荐你试试这个 https://github.com/Kozea/WeasyPrint,我感觉比较不错,打印出来的效果比 wkhtmltopdf 好挺多的。而且开发还挺活跃,有问题直接提 issue
phantomjs
已经解决,原因是版本太低,在外国论坛找了一个高版本的已经解决,谢谢诸位!


