利用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修改操作系统时间的方法
May 18 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
Python安装lz4-0.10.1遇到的坑
May 20 Python
深入浅析Python的类
Jun 22 Python
PyCharm配置mongo插件的方法
Nov 30 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
使用python实现回文数的四种方法小结
Nov 24 Python
python tkinter Entry控件的焦点移动操作
May 22 Python
Python如何利用pandas读取csv数据并绘图
Jul 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
php join函数应用
2011/05/04 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
PHP SOCKET编程详解
2015/05/22 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
python Pygame的具体使用讲解
2017/11/03 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
python实现输入数字的连续加减方法
2018/06/22 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
Django REST framework视图的用法
2019/01/16 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
Django之form组件自动校验数据实现
2020/01/14 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
销售代表求职自荐信
2013/10/01 职场文书
会议邀请书范文
2014/02/02 职场文书
爱心倡议书范文
2014/05/12 职场文书
4s店活动策划方案
2014/08/25 职场文书
开票员岗位职责
2015/02/12 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript