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

d1e0547891db8d0aa743795512b818d0.png

这是恋习Python推荐的第118篇好文

来源:Python爬虫与算法

作者:jclian

  笔者在今天的工作中,遇到了一个需求,那就是如何将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 = '这是一个测试文件。' + '
' + 'Hello from Python!'

html = '' \
       '

%s

'%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如下:

f693ee62cf710ef44e5321c66b5638d9.png
生成的PDF

如何生成PDF中的表格

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

29679d5e74bd2bf28b4e5ebb142a002a.png
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(['%s'%(td_width, _) for _ in lines[i].split(',')])+''
    content += tr
content += ''

html = '' \
       '
%s
' % content

# 转换为PDF
pdfkit.from_string(html, './iris.pdf')

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

247dfa3391eefea019d159ada9e84c42.png
生成的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秒。输出结果如下:

......
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秒,明显快了很多~

觉得有用,点个在看呗!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大学计算机基础python第二次作业_python第二次作业-titanic数据集练习

一、读入titanic.xlsx文件,按照教材示例步骤,完成数据清洗。 titanic数据集包含11个特征,分别是: Survived:0代表死亡,1代表存活 Pclass:乘客所持票类,有三种值(1,2,3) Name:乘客姓名 Sex:乘客性别 Age:乘客…

大一计算机上机试题2017,2017历年全国计算机二级ACCESS上机试题及答案

可通过实际操作,锻炼Access的学习能力,动手能力,编程思想锻炼等,也可以作为access 数据库国际二级考试使用呢历年Access操作试题解析(2017.5.8整理,可能为2015年以前的)第一套一、基本操作题(计30分)(1)新建数据库"学生.mdb",将考生文件夹中的…

怎么做手机的上下滑动_手机视频恢复怎么做?删除时间较久的找回方法

手机视频恢复?话说到手机视频误删的情况对于一些用户来说是常态,手机视频多又杂,经常全选删除,不小心多选了没有发现就给一起删除了!事隔多个月以后突然要用到,却怎么也找不到了,最近删除相册也…

opencv利用矩形框选中某一区域_【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。Ubuntu系统中安装OpenCV 4前面我…

英伟达最大gpu_英伟达正式发布Ampere架构GPU,完成史上最大性能飞跃

PingWest品玩5月14日讯,在GTC 2020线上发布会上,英伟达CEO黄仁勋正式推出了安培(Ampere)架构GPU。据其表示,这块芯片采用7nm工艺,540亿晶体管,20倍AI算力,实现5大技术创新。黄仁勋表示,“这是英…

c++ map 析构函数_C++|类继承关系中的虚函数、虚析构函数、虚基类

在继承关系中,虚函数、虚析构函数、虚基类中使用的关键字virtual都是在告诉编译器,此处要进行特殊处理:虚函数:函数重写时的要求编译器动态绑定来实现多多态 ;虚析构函数:当基类指针指向在堆内实现的派生类…

上海j计算机一级分值,计算机一级考试内容及分值

计算机一级考试内容有哪些,各题型分值是多少,以下是小编整理的计算机一级考试相关内容,供您参考与阅读。计算机一级考试内容及分值软件环境:Windows 7 操作系统,WPS Office 2012 办公软件。并在指定时间内,完成下列各项操作:(1) 选择题(计算机…

启动之后自己关闭_电脑一开都是广告,请问怎么永久关闭?

电脑一开机,主屏广告、右下角弹窗广告蹭蹭蹭的弹个不停,相信很多人都有这样的困扰,尤其是在公共电脑上,广告多的要命。你是否有这样的经历,上学的时候,教室前面的用来讲课的电脑,在老师用PPT授课…

5错误怎么办_“选择不对,一生白费”:如果选错了,该怎么办?记住这两句话...

上帝把1、2、3、4、5、6、7、8、9、0十个数字摆出来,让面前10个人去取,并说道:“一人只能取一个。”人们争先恐后地拥上去,把9、8、7、6、5、4、3都抢走了。取到2和1的人,都说自己运气不好,得到的很少很少。…

北京大学灵异事件计算机房,北大 清华高校 发生的真实恐怖灵异事件

北京大学我有一高中同学b,大学在交大上的,有段时间没联系了,偶然的机会在街上遇到他,当时我被他吓了一跳,只见他脸色发青,眼窝深陷,一问之下,他神情紧张地告诉我:他遇到鬼…

python苹果电脑如何下载_python for Mac|python Mac版V2.7.10下载(暂未上线)_预约_飞翔下载...

pythonfor mac是一种即译式的,互动的,面向对象的编程语言,它包含了模组式的操作,异常处理,动态资料形态,十分高层次的动态资料结构,以及类别的使用。如果因为网络原因,去 Python 官网…

mysql 设置字段自动增长值_mysql命令行脚本

命令行连接在工作中主要使用命令操作方式,要求熟练编写打开终端,运行命令mysql -uroot -p回车后输入密码,当前设置的密码为mysql连接成功后如下图退出登录quit 和 exit或ctrld登录成功后,输入如下命令查看效果查看版本&#xff1a…

python显示表格_在Python中获取Excel表格的数量

How get number of sheet in below python example? file self.excel_file.decode(base64) excel_fileobj TemporaryFile(wb) excel_fileobj.write(file) excel_fileobj.seek(0) workbook openpyxl.load_workbook(excel_fileobj, data_onlyTrue) sheet_number ??? sheet…

asp网站本地测试服务器,小旋风asp服务器,asp本地环境调试必备

学习asp,要在本地搭建一个asp服务器调试环境吧,那么必不可少的要找asp本地调试环境软件,超级小旋风AspWebServer是一个不错的选择。超级小旋风AspWebServer系统基于NetBox开发,可以跟IIS媲美的服务器。小旋风asp服务器 该软件是由…

快速傅里叶变换python_【原创】OpenCV-Python系列之傅里叶变换(三十八)

OpenCV-Python系列之傅里叶变换 傅里叶变换 我们生活在时间的世界中,早上7:00起来吃早饭,8:00去挤地铁,9:00开始上班。。。以时间为参照就是时域分析。 但是在频域中一切都是静止的!可能有些人无法理解,我建议大家看看…

c# 服务器性能监控,C#服务器性能监控之WMI的代码示例详解

1.WMI简介WMI是英文Windows Management Instrumentation的简写,通过使用WMI,我们可以获取本地或远程服务器的性能参数和进程运行情况,以及大部分硬件信息,但前提是运行的用户要有足够的权限,如administrator组用户等。…

中运算符百分号作用_SQL基础知识——LIKE运算符

LIKE 作用在WHERE子句中使用LIKE运算符来搜索列中的指定模式。 有两个通配符与LIKE运算符一起使用:% - 百分号表示零个,一个或多个字符_ - 下划线表示单个字符注意: MS Access使用问号(?)而不是下划线(_)。 百分号和下划线也可以…

服务器点播直播系统,服务器点播直播系统

服务器点播直播系统 内容精选换一换在SAP系统中,除了SAP HANA节点使用裸金属服务器外,其他节点都使用弹性云服务器。Jump Host弹性云服务器,用户可通过访问该服务器后,再通过SSH协议跳转到SAP HANA及SAP应用节点。同时用于部署SAP…

eureka多了一个莫名其妙的服务_SpringCloud 服务注册与发现组件 Eureka

一、SpringCloud介绍微服务,为了更好的创建项目组织结构、更高效的项目的迭代效果、更优良的架构设计,就需要使用微服务的架构思想,来对项目进行搭建或者重构。企业碰到的第一个问题是服务如何进行拆分。根据业务边界来划分,拆分开…

怎么用贝塞尔工具画圆_Win10恶意软件删除工具怎么用?这个方法都舍不得分享...

Win10恶意软件删除工具怎么用?恶意软件删除工具相信很多朋友都会在windows更新中看到过,但是很多朋友确从来没有用过,微软每个月都会把恶意软件删除工具给更新一下,主要作用是用来分析用户电脑上是否存在风险程序的工具。其实大家…