利用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继承问题
May 29 Python
window下eclipse安装python插件教程
Apr 24 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
Python 操作 MySQL数据库
Sep 18 Python
python定时截屏实现
Nov 02 Python
python 实现图片裁剪小工具
Feb 02 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
jquery $.ajax入门应用二
2008/11/19 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python读写csv文件方法详细总结
2019/07/05 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
如何通过python实现人脸识别验证
2020/01/17 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
给男朋友的道歉信
2014/01/12 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS