利用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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
python raise的基本使用
Sep 10 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
Django权限控制的使用
Jan 07 Python
python某漫画app逆向
Mar 31 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
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
详解JS模块导入导出
2017/12/20 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
如何在Python中编写并发程序
2016/02/27 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python字典操作实例详解
2017/11/16 Python
Django 视图层(view)的使用
2018/11/09 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
使用python+whoosh实现全文检索
2019/12/09 Python
Python reduce函数作用及实例解析
2020/05/08 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
公关活动策划方案
2014/05/25 职场文书
供用电专业求职信
2014/07/07 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
办公室文员岗位职责
2015/02/04 职场文书
杭白菊导游词
2015/02/10 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
Python中for后接else的语法使用
2021/05/18 Python
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
关于Python中*args和**kwargs的深入理解
2021/08/07 Python