利用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 中文乱码问题深入分析
Mar 13 Python
python生成器的使用方法
Nov 21 Python
Django中处理出错页面的方法
Jul 15 Python
Python实现的科学计算器功能示例
Aug 04 Python
python GUI实例学习
Nov 21 Python
儿童学习python的一些小技巧
May 27 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
wxPython实现文本框基础组件
Nov 18 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
python实现猜拳游戏项目
Nov 30 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电台频率大全 - 29 青海省
2020/03/11 无线电
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
Js的MessageBox
2006/12/03 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
python发送邮件接收邮件示例分享
2014/01/21 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
天游软件面试
2013/11/23 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
中学生个人自我评价
2014/02/06 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
实施意见格式范本
2015/06/05 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书