利用python程序生成word和PDF文档的方法


Posted in Python onFebruary 14, 2017

一、程序导出word文档的方法

将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freemarker这样的模板引擎这样的方式。php中也有一些相应的方法,但在python中将web/html内容生成world文档的方法是很少的。其中最不好解决的就是如何将使用js代码异步获取填充的数据,图片导出到word文档中。

1. unoconv

功能:

1.支持将本地html文档转换为docx格式的文档,所以需要先将网页中的html文件保存到本地,再调用unoconv进行转换。转换效果也不错,使用方法非常简单。

\# 安装
sudo apt-get install unoconv
\# 使用
unoconv -f pdf *.odt
unoconv -f doc *.odt
unoconv -f html *.odt

缺点:

      1.只能对静态html进行转换,对于页面中有使用ajax异步获取数据的地方也不能转换(主要是要保证从web页面保存下来的html文件中有数据)。

      2.只能对html进行转换,如果页面中有使用echarts,highcharts等js代码生成的图片,是无法将这些图片转换到word文档中;

      3.生成的word文档内容格式不容易控制。

2. python-docx

功能:

1.python-docx是一个可以读写word文档的python库。

使用方法:

1.获取网页中的数据,使用python手动排版添加到word文档中。

from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading('Document Title', 0)
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
 'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
 'first item in ordered list', style='ListNumber'
)
document.add_picture('monty-truth.png', width=Inches(1.25))
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
 row_cells = table.add_row().cells
 row_cells[0].text = str(item.qty)
 row_cells[1].text = str(item.id)
 row_cells[2].text = item.desc
document.add_page_break()
document.save('demo.docx')
from docx import Document
from docx.shared import Inches
document = Document()
for row in range(9):
 t = document.add_table(rows=1,cols=1,style = 'Table Grid')
 t.autofit = False #很重要!
 w = float(row) / 2.0
 t.columns[0].width = Inches(w)
document.save('table-step.docx')

缺点:

功能非常弱。有很多限制比如不支持模板等,只能生成简单格式的word文档。

二、程序导出PDF文档方法

1.pdfkit

功能:

      1.wkhtmltopdf主要用于HTML生成PDF。

      2.pdfkit是基于wkhtmltopdf的python封装,支持URL,本地文件,文本内容到PDF的转换,其最终还是调用wkhtmltopdf命令。是目前接触到的python生成pdf效果较好的。

优点:

      1.wkhtmltopdf:利用webkit内核将HTML转为PDF

            webkit是一个高效、开源的浏览器内核,包括Chrome和Safari在内的浏览器都使用了这个内核。Chrome打印当前网页的功能,其中有一个选项就是直接“保存为 PDF”。

      2.wkhtmltopdf使用webkit内核的PDF渲染引擎来将HTML页面转换为PDF。高保真,转换质量很好,且使用非常简单。
使用方法:

\# 安装
pip install pdfkit
\# 使用
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')

缺点:

      1.对使用echarts,highcharts这样的js代码生成的图标无法转换为pdf(因为它的功能主要是将html转换为pdf,而不是将js转换为pdf)。对于纯静态页面的转换效果还是不错的。

      2.其他

其他生成pdf的插件还有:weasyprint,reportlab,PyPDF2等,经简单试验都不如pdfkit效果好,且有些用法复杂。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
Python实现自动发送邮件功能
Mar 02 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
基于python读取.mat文件并取出信息
Dec 16 Python
基于python监控程序是否关闭
Jan 14 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
Python中类型检查的详细介绍
Feb 13 #Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 #Python
python cx_Oracle模块的安装和使用详细介绍
Feb 13 #Python
python数据清洗系列之字符串处理详解
Feb 12 #Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 #Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 #Python
python3制作捧腹网段子页爬虫
Feb 12 #Python
You might like
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php数据访问之查询关键字
2016/05/09 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
jquery异步调用页面后台方法‏(asp.net)
2011/03/01 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
JS中的多态实例详解
2017/10/15 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
简单的Python2.7编程初学经验总结
2015/04/01 Python
python开发简易版在线音乐播放器
2017/03/03 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Django values()和value_list()的使用
2020/03/31 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
夜大自我鉴定
2013/10/31 职场文书
升职自荐书范文
2013/11/28 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
留守儿童工作方案
2014/06/02 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
医德医风自我评价
2014/09/19 职场文书
个人汇报材料范文
2014/12/30 职场文书
现实表现证明材料
2015/06/19 职场文书
升学宴来宾致辞
2015/07/27 职场文书
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
使用Python解决图表与画布的间距问题
2022/04/11 Python