加入收藏 | 设为首页 |

沈傲君-Python将字符串生成PDF

海外新闻 时间: 浏览:349 次

怎么将Python字符串生成PDF

该问题的处理思路仍是运用将Python字符串嵌入到HTML代码中处理,留意换行需要用
标签,示例代码如下:

import pdfkit
# PDF中包括的文字
content = '这是一个测验文件。' + '
' + 'Hello from Python!'
html = '' \
'

%s

'%content
# 转换为PDF
pdfkit.from_string(html, './test.pdf')

输出的成果如下:

Loading pages (1/6) Counting沈傲君-Python将字符串生成PDF pages (2沈傲君-Python将字符串生成PDF/6) Resolving links (4/6) Loading headers and footers (5/6) Printing pages (6/6) Done

生成的theavyest.pdf如下:

怎么生成PDF中的表格

接下来咱们考虑怎么将csv文件转换为PDF中的表格,思路仍是运用HTML代码。示例的iris.csv文件(部分)如下:

将csv文件转换为PDF中的表格的Python代码如下:

import pdfkit
# 读取csv文件
with open('iris.csv', 'r') as f:
lines = [_.strip() for _ in f.readlines()]
# 转化为html中的表格款式
td_width = 100
content = '' % (td_width*len(lines[0].split(',')))
for i in range(len(lines)):
tr = ''+''.join([''%(td_width, _) for _ in lines[i].split(',')])+''
content += tr
content += '
%s
'
html = '' \
'
%s
' % content
# 转换为PDF
pdfkit.from_string(html, './iris.pdf')

生成的PDF文件为iris.pdf,部分内沈傲君-Python将字符串生成PDF容如下:

处理PDF生成速度慢的问题

用pdfkit生成PDF文件尽管便利,但有一个比较大的缺陷,那就是生成PDF的速度比较慢,这儿咱们能够做个简略的测验,比方生成100份PDF文件,里边的文字为“这是第*份测验文件!”。Python代码如下:

import pdfkit
import time
start_time = time.time()
for i in range(100):
content = '这是第%d份测验文件!'%(i+1)
html = '' \
'
%s
' % content
# 转换为PDF
pdfkit.from_string(html, './test/%s.pdf'%(i+1))
end_time = time.time()
print('总共耗时:%s 秒.' %(end_time-start_time))

在这个程序中,生成100份PDF文件总共耗时约192秒。输出成果如下:

...沈傲君-Python将字符串生成PDF...
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
总共耗时:191.9226369857788 秒.

假如想要加速生成的速度,咱们能够运用多线程来完结,首要运用concurrent.futures模块,完好的Python代码如下:

import pdfkit
import time
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
start_time = time.time()
# 函数: 生成PDF
def convert_2_pdf(i):
content = '这是第%d份测验文件!'%(i+1)
html = '' \
'
%s
' % content
# 转换为PDF
pdfkit.from_string(html, './test/%s.pdf'%(i+1))
# 运用多线程生成PDF
executor = ThreadPoolExecutor(max_workers=10) # 能够自己调整max_workers,即线程的个数
# submit()的参数: 第一个为函数, 之后为该函数的传入参数,答应有多个
future_tasks = [executor.submit(convert_2_pdf, i) for i in range(100)]
# 等候一切的线程完结,才进入后续的履行
wait(future_tasks, return_when=ALL_COMPLETED)
end_time = time.time()
print('总共耗时:%s 秒.' %(end_time-start_time))

在这个程序中,生成100份PDF文件总共耗时约41秒,显着快了许多~

对Python感兴趣的小伙伴,记住私信小编“007”收取全套Python材料哦。