返回
HTML转PDF中的痛处与收获
后端
2024-01-10 01:29:12
转HTML到PDF,网上有很多介绍,不过我的这次尝试,是一连串的问题与条件。
第一步,访问一个接口获取HTML并且转PDF,不能用插件,服务器不能装。对此,我用了下面这个方案:
```
from io import BytesIO
from xhtml2pdf import pisa
import requests
# 用 pip install xhtml2pdf 命令安装库
url = 'http://example.com'
response = requests.get(url)
# 将HTML字符串放在BytesIO对象里,BytesIO模拟了一个二进制文件
bio = BytesIO(response.content)
# 最终储存的PDF文件的地址
pdf_filename = 'your_file.pdf'
pdf = pisa.pisaDocument(bio, file(pdf_filename, "wb"))
if not pdf.err:
print("转换完成!")
```
第二步,HTML并不符合XML标准,用XML解析器(render)肯定不合适,但我依然成功实现了HTML的解析,办法是利用正则表达式提取HTML里的内容,见下面例子:
```
import re
def cleanhtml(raw_html):
cleanr = re.compile('<.*?>')
cleantext = re.sub(cleanr, '', raw_html)
return cleantext
```
第三步,既然用不上XML解析,当然也就不适合用XML解析器来把HTML转成PDF了,这倒不是什么大问题,cStringIO模块提供了StringIO对象,我们完全可以用StringIO对象实现和BytesIO对象一样的功能。
```
from cStringIO import StringIO
# ... 前面代码
bio = StringIO()
pdf = pisa.pisaDocument(bio, file(pdf_filename, "wb"))
# ... 后面代码
```
这之后,无论遇到什么问题,都不过是常规的PDF生成中遇到的问题罢了,也不足为奇了。