python根据模板生成pdf文件_程序生成word与PDF文档的方法(python)

程序导出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')

缺点:

1.功能非常弱。有很多限制比如不支持模板等,只能生成简单格式的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效果好,且有些用法复杂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js将object转化为json数据,json数据转js对象

json数据转js对象: JSON.parse(); js对象转json数据: JSON.stringify();

本地更新github项目_GitHub开源项目2019-03-29更新精选

1.etcd:一个高可用的分布式键值数据库,k8s 全家桶标配的注册与发现服务etcd:一个高可用的分布式键值数据库,k8s 全家桶标配的注册与发现服务。它采用 raft 一致性算法,基于 Go 语言实现。可以通过该项目了解、学习 raf…

js中for循环调用回调函数,一直循环最后一个

js的for循环中使用回调函数,获取到的值总是最后一个值?_MLAY-CSDN博客_js 循环回调函数

maven default aliyun_大家看看大佬对Maven仓库的讲解,有何高明之处?

概念Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)。分类maven的仓库只有两大类:1.本地仓库 2.远程仓库,在远程仓库中又分成了3种:中央仓库、 私服…

形参和实参的区别

形参就是函数声明时的变量,实参是我们调用该函数时传入的具体参数。 function function(a,b){ console.log(a,b) }function(1,2) 这里1,2就是实参 a,b是形参

JAVA八种基本类型

基本类型(primitive types), 共有8种,即int, short, long, byte, float, double, boolean, char(注意,并没有string的基本类型)

计算差分方程的收敛点_数值计算(五十九)热传导方程组的差分数值求解

1 问题描述Chenglin Li:数值计算(三)matlab求解一般的偏微分方程组​zhuanlan.zhihu.com因为给出的边界条件包含导数,因此需要同时考虑前向差分和后向差分;遍历循环,先计算每个坐标的时间节点,或…

python树莓派编程_python树莓派编程

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!例如,你可以用树莓派搭建你自己的家用云存储服务器。? 树莓派用python来进行编程。 树莓派项目的…

Java 引用类型变量的声明和使用

引用类型变量的声明和使用 (1)把类名当作是一种类型来声明变量,这种变量叫引用类型变量。如:People people; (2)引用类型变量保存对象的“引用”,即对象的地址。 (3)对象的创建  new 类名()  如:new People(); (4)new创建对象后…

se是什么职位_女皇大学PSE&SE 独家解析!

坐落于圣劳伦斯河畔的女皇大学成立于1841年,至今已经有178年的历史了。作为加拿大传统的四大名校“Old Four”之一,女王大学一直以来在学术成就(常年位列麦考林排名医博类前5),学生满意度(麦考林排名医博类…

js中new操作符

1.什么是new? 在JS中,new的作用是通过构造函数来创建一个实例对象(和普通函数不一样,当函数用作构造函数时,首字母一般要大写) function Foo(name) {this.name name; } console.log("new Foo(mm)的类型&#…

charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置

Charles的安装Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具。相关链接官方网站:https://www.charlesproxy.com下载链接:https:/…

Git创建本地分支并提交到远程仓库

1.建立本地仓库 查看当前项目根目录中有没有 .git文件(隐藏文件),如果没有,右键->Git bash here ,然后输入命令git init建立本地仓库 git init 2.将代码提交到本地仓库 git add git commit -m "new branch…

python删除一个文件_Python 实现一个小功能: 删除某路径下文件及文件夹的脚本...

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。 编程之家小编现在分享给大家,也给大家做个参考。 #!/usr/bin/env python import os import shutil delList [] delDir "/home/test" delList os.listdir(delDir ) for f in delList: filePath o…

uniapp防抖操作

1.新建common文件并创建common.js文件 // 防止处理多次点击function noMultipleClicks(methods, info) {// methods是需要点击后需要执行的函数, info是点击需要传的参数let that this;if (that.noClick) {// 第一次点击that.noClick false;if(info && inf…

JS去除字符串去除最后的逗号

let str"1,2,3,"str str.substring(0, str.lastIndexOf(,));

一个div 上下两行_web前端工程师如何理解 CSS 布局和块级格式化上下文

CSS是web前端中的重要内容,很多初学者在学习CSS时都会遇到各种各样的问题,今天就给大家分享web前端开发如何理解CSS不惧和块级格式化上下文。也许你从未听说过这个术语,但是如果你曾经用 CSS 做过布局,那么你也许知道它是什么。理…

什么函数是回调函数?

1.什么函数是回调函数? 1.你定义得 2.你没有调用 3.它最终执行了 2.常见的回调函数 1.dom事件操作函数 2.ajax请求回调函数 3.定时器回调函数 ......

html转word 图片丢失 java_Java 设置 Word 文档中图片文字环绕方式

在Word文档中插入图片时,选择合理的图片文字环绕方式可以使图片的展示效果更好,也能使页面的排版更加美观。本文就将介绍如何使用Free Spire.Doc for Java 添加图片到Word文档并设置图片的大小及文字环绕方式。Jar包导入方法一:下载Free Spir…

c语言getchar_二级C语言试题刷题录

2020.9 计算机二级C语言科目选择题标黑的为正确选项程序流程图中带有箭头的线段表示的是控制流 图元关系、数据流、调用关系当图为数据流图的时候,标有名字的箭头表示数据流结构化程序设计的基本原则不包括多态性 自顶向下、模块化、逐步求精软件设计中模块划分应遵…