利用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连接mysql并提交mysql事务示例
Mar 05 Python
使用SAE部署Python运行环境的教程
May 05 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
Python代码实现KNN算法
Dec 20 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 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面向对象编程快速入门
2006/10/09 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
php连接数据库代码应用分析
2011/05/29 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
js图片处理示例代码
2014/05/12 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
spyder常用快捷键(分享)
2017/07/19 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
Python接口测试get请求过程详解
2020/02/28 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
Europcar比利时:租车
2019/08/26 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
实习生自我鉴定范文
2013/12/05 职场文书
大专生自荐书范文
2014/06/22 职场文书
党员对照检查材料
2014/09/22 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
英语导游欢迎词
2015/09/30 职场文书
详解Vue slot插槽
2021/11/20 Vue.js
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python