利用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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
Python实例分享:快速查找出被挂马的文件
Jun 08 Python
Python的垃圾回收机制深入分析
Jul 16 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
理解Python中的类与实例
Apr 27 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python socket处理client连接过程解析
Mar 18 Python
重写django的model下的objects模型管理器方式
May 15 Python
Django 构建模板form表单的两种方法
Jun 14 Python
python将字典内容写入json文件的实例代码
Aug 12 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错误、异常处理机制(补充)
2012/05/07 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
执行iframe中的javascript方法
2008/10/07 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
js实现日历
2020/11/07 Javascript
python使用百度翻译进行中翻英示例
2014/04/14 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
Python中断多重循环的思路总结
2019/10/04 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
大学生村官任职感言
2014/01/09 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
详解nginx进程锁的实现
2021/06/14 Servers
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS