利用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目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
简单介绍Python中用于求最小值的min()方法
May 15 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
给你选择Python语言实现机器学习算法的三大理由
Nov 15 Python
Python reduce()函数的用法小结
Nov 15 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
django 微信网页授权登陆的实现
Jul 30 Python
Python双链表原理与实现方法详解
Feb 22 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
详解Python魔法方法之描述符类
May 26 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
php使用ereg验证文件上传的方法
2014/12/16 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
js获取域名的方法
2015/01/27 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
JavaScript模块详解
2017/12/18 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
python简单获取数组元素个数的方法
2015/07/13 Python
快速入手Python字符编码
2016/08/03 Python
python使用mysql数据库示例代码
2017/05/21 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
python 实现简单的FTP程序
2019/12/27 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
印度网上药店:1mg
2017/10/13 全球购物
公益广告语集锦
2014/03/13 职场文书
超市店庆活动方案
2014/08/31 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
前台接待员岗位职责
2015/04/15 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL