笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF。比如,需要把Python字符串‘这是测试文件’生成为PDF, 该PDF中含有文字‘这是测试文件’。
经过一番检索,笔者决定采用wkhtmltopdf这个软件,它可以将HTML转化为PDF。wkhtmltopdf的访问网址为:https://wkhtmltopdf.org/downloads.html ,读者可根据自己的系统下载对应的文件并安装。安装好wkhtmltopdf,我们再安装这个软件的Python第三方模块——pdfkit,安装方式如下:

pip install pdfkit

我们再讨论如下问题:

  • 如何将Python字符串生成PDF;

  • 如何生成PDF中的表格;

  • 解决PDF生成速度慢的问题。

如何将Python字符串生成PDF
  
该问题的解决思路还是利用将Python字符串嵌入到HTML代码中解决,注意换行需要用
标签,示例代码如下:

import pdfkit# PDF中包含的文字
content = '这是一个测试文件。' + '<br>' + 'Hello from Python!'html = '<html><head><meta charset="UTF-8"></head>' '<body><div align="center"><p>%s</p></div></body></html>'%content# 转换为PDF
pdfkit.from_string(html, './test.pdf')
-----------------------------------------------------
输出的结果如下:Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

生成的test.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()]
'''
遇到问题没人解答?
小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
# 转化为html中的表格样式
td_width = 100
content = '<table width="%s" border="1" cellspacing="0px" style="border-collapse:collapse">' % (td_width*len(lines[0].split(',')))for i in range(len(lines)):tr = '<tr>'+''.join(['<td width="%d">%s</td>'%(td_width, _) for _ in lines[i].split(',')])+'</tr>'content += trcontent += '</table>'html = '<html><head><meta charset="UTF-8"></head>' '<body><div align="center">%s</div></body></html>' % content# 转换为PDF
pdfkit.from_string(html, './iris.pdf')

生成的PDF文件为iris.pdf,部分内容如下:

解决PDF生成速度慢的问题

用pdfkit生成PDF文件虽然方便,但有一个比较大的缺点,那就是生成PDF的速度比较慢,这里我们可以做个简单的测试,比如生成100份PDF文件,里面的文字为“这是第*份测试文件!”。Python代码如下:

import pdfkit
import time
'''
遇到问题没人解答?
小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
start_time = time.time()for i in range(100):content = '这是第%d份测试文件!'%(i+1)html = '<html><head><meta charset="UTF-8"></head>' '<body><div align="center">%s</div></body></html>' % content# 转换为PDFpdfkit.from_string(html, './test/%s.pdf'%(i+1))end_time = time.time()print('一共耗时:%s 秒.' %(end_time-start_time))

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

......
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_COMPLETEDstart_time = time.time()# 函数: 生成PDF
def convert_2_pdf(i):content = '这是第%d份测试文件!'%(i+1)html = '<html><head><meta charset="UTF-8"></head>' '<body><div align="center">%s</div></body></html>' % content# 转换为PDFpdfkit.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字符串生成PDF相关推荐

  1. 生成html_听说你不会用Python将字符串生成PDF?来,我教你!

    这是恋习Python推荐的第118篇好文 来源:Python爬虫与算法 作者:jclian   笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF.比如,需要把Python字 ...

  2. python数据生成pdf,Python生成pdf文件的方法

    摘要:这篇Python开发技术栏目下的"Python生成pdf文件的方法",介绍的技术点是"python生成pdf文件.python生成pdf.生成pdf文件.Pytho ...

  3. python轻松生成pdf文档

    前言 python对办公一族来说,是个提高办公效率的得力利器.熟练使用它,可以轻松完成很多繁杂的事情.(文末送读者福利) 它可以轻松地操作Word.Excel.PDF这种文档. 相比较C#.C++等其 ...

  4. 高效办公!Python 批量生成PDF文档

    日常办公中,经常会使用PDF文档,难免需要对PDF文档进行编辑,有时候PDF文档中的大部分内容都是一样的,只是发送对象不同. 这种模板套用的场景下,使用Python进行自动化就尤为方便,用最短的时间办 ...

  5. 图文并茂,Python轻松生成PDF数据分析报告

    reportlab是Python的一个标准库,可以画图.画表格.编辑文字,最后可以输出PDF格式.它的逻辑和编辑一个word文档或者PPT很像.有两种方法: 1)建立一个空白文档,然后在上面写文字.画 ...

  6. Html字符串生成pdf的方法 支持中文及中文换行 可行demo和jar

    中文换行修改好后的jar:http://download.csdn.net/download/weixin_36795183/9983888 pdf.JS http://download.csdn.n ...

  7. Itext 将html 字符串生成PDF 方法

    项目需求 1.实现将html 内容(含中文) 生成pdf 2.将现有的png格式图片 合入 pdf 中的特定位置 3.将base64 编码的图腾 合入 pdf 中的特定位置 package cn.te ...

  8. python 生成pdf_如何使用Python生成PDF?

    在日常办公中,我们会经常使用PDF文件.生成PDF的方法有很多,其中Python就可以.你知道怎么使用Python也可以生成PDF吗?下面来和小编一起学习下吧. 首先我们访问网址:https://wk ...

  9. html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)

    文章目录 一.html转换成pdf工具-wkhtmltopdf 1. 什么是wkhtmltopdf 2. 如何使用它? 3. 常见问题 error while loading shared libra ...

最新文章

  1. 前沿地带:从量子计算到量子互联网
  2. Mac下查看端口占用
  3. Python面试题-朋友昨天去面试,这5个Python面试题都被考到了,太神奇了!
  4. mysql字段数值累加_mysql字段值(字符串)累加 | 学步园
  5. JavaSE学习总结第08天_面向对象3
  6. ModuleNotFoundError: No module named 'oscar.app'
  7. 《学习之道》第九章不要突击工作
  8. PointNet:3D点集分类与分割深度学习模型
  9. ue4移动到一定距离_UE4移动组件详解(一)——移动框架与实现原理
  10. _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...
  11. NLP语言资源 | 汽车、金融等9大领域预训练词向量与依存、拼音等4类特殊向量开放...
  12. 勤哲excel服务器自动计算工资,勤哲Excel服务器软件实现财务自动化管理系统
  13. 昂达 v891 v1 终于 删除 windows 分区 并且恢复了容量。
  14. 项目开发日报表(第一天)
  15. 2015年腾讯阿里实习生招聘面试经历
  16. 抖音号永久封禁了怎么解封
  17. 零基础学习之万物皆可GAN学习路线
  18. mysql odbc桥_jdbc-odbc桥连接数据库
  19. 针对“扫雷“和“植物大战僵尸“游戏,分析,扫描,阳光值,植物,金币,僵尸的分析逆向
  20. XML 中的 xmlns 等属性的意义

热门文章

  1. HDU 1695 BZOJ 2301 莫比乌斯反演
  2. 用PHPcms V9四步完成WAP手机站搭建
  3. 黑马程序员--线程【下】
  4. Windows Phone开发(18):变形金刚第九季——变换
  5. iPhone开发教程之Core Data 常见问题的总结
  6. 正则表达式,VI,SED及shell编程2010-12-05
  7. 解密联想20年的45条法则
  8. 涡流探伤仪计算机软件,册亨通过式涡流探伤仪涡流探伤仪保养
  9. python语句x 3 3执行_Python语言中,x=2,y=3,执行x,y=y,x之后,x和y的值分别是什么?...
  10. 【整理】SAP货币汇率转换