利用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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python判断变量是否已经定义的方法
Aug 18 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
Python 通过打码平台实现验证码的实现
May 13 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
python多进程下的生产者和消费者模型
May 07 Python
用Python制作音乐海报
Jan 26 Python
python 如何在list中找Topk的数值和索引
May 20 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 大数据量及海量数据处理算法总结
2011/05/07 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
js面向对象编程总结
2017/02/16 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
python实现代理服务功能实例
2013/11/15 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
详解python中的json和字典dict
2018/06/22 Python
Python切片操作深入详解
2018/07/27 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python编写俄罗斯方块
2020/03/13 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
红旗团支部事迹材料
2014/01/27 职场文书
读书演讲主持词
2014/03/18 职场文书
管理工程专业求职信
2014/08/10 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
刘胡兰观后感
2015/06/16 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python