利用python程序生成word和PDF文档的方法

发布时间 - 2026-01-10 23:01:56    点击率:

一、程序导出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生成word文档  # python生成pdf文件  # python  # 生成word  # python批量实现Word文件转换为PDF文件  # python word转pdf代码实例  # 详解用Python把PDF转为Word方法总结  # 一文教会你用Python实现pdf转word  # Python实现批量word文档转pdf并统计其页码  # Python实现批量将word转换成pdf  # Python实现PDF转Word的多种方式总结  # Python将Word文档转为PDF的两种方法  # 文档  # 转换为  # 中有  # 是一个  # 能对  # 主要是  # 很好  # 有很多  # 但在  # 较好  # 不容易  # 很重要  # 不支持  # 也不错  # 这篇文章  # 中也  # 等各种  # 主要用于  # 接触到  # 先将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python企业级消息系统教程_KafkaRabbitMQ高并发应用  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel怎么实现验证码(Captcha)功能  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Android使用GridView实现日历的简单功能  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  Laravel怎么在Controller之外的地方验证数据  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  原生JS实现图片轮播切换效果  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  清除minerd进程的简单方法  Laravel如何使用.env文件管理环境变量?(最佳实践)  JS弹性运动实现方法分析  java获取注册ip实例  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  详解MySQL数据库的安装与密码配置  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  如何在新浪SAE免费搭建个人博客?  js实现点击每个li节点,都弹出其文本值及修改  WordPress 子目录安装中正确处理脚本路径的完整指南  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  EditPlus中的正则表达式实战(6)  如何利用DOS批处理实现定时关机操作详解  EditPlus中的正则表达式 实战(4)  如何快速重置建站主机并恢复默认配置?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  网易LOFTER官网链接 老福特网页版登录地址  如何注册花生壳免费域名并搭建个人网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  javascript中闭包概念与用法深入理解  如何在七牛云存储上搭建网站并设置自定义域名?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  大学网站设计制作软件有哪些,如何将网站制作成自己app?