相关文章推荐
不要命的鸡蛋  ·  excel函数获取excel中json中的值 ...·  2 月前    · 
热心肠的香菇  ·  绑定到文档或电子表格中的区域 - ...·  1 月前    · 
怕老婆的皮带  ·  如何将报表嵌入到第三方系统中_智能商业分析 ...·  3 周前    · 
急躁的书包  ·  WebView.EvaluateJavasc ...·  1 年前    · 
谦和的马克杯  ·  Qlistwidget刷新界面问题--突然有 ...·  1 年前    · 
慷慨的黄豆  ·  在实现VOIP应用时,最好使用SIP协议栈或 ...·  1 年前    · 
高大的海龟  ·  事件绑定_51CTO博客_vue动态绑定cl ...·  1 年前    · 
飞翔的遥控器  ·  WPF 关于 ComboBox ...·  1 年前    · 
Code  ›  使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!开发者社区
python pdf 电子表格
https://cloud.tencent.com/developer/article/1644482
气宇轩昂的铅笔
9 月前
刘早起

使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
刘早起
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!

使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!

作者头像
刘早起
发布 于 2020-06-15 10:48:46
8.2K 11
发布 于 2020-06-15 10:48:46
举报
文章被收录于专栏: 早起Python

Python办公自动化|Excel表格,自动更新

同一个操作执行两次,就要考虑自动化!

大家好,又到了Python办公自动化专题。

今天讲的是各位一定会接触到的PDF转换,关于各种格式的文件转换为PDF有很多第三方工具与网站可以实现,但是使用Python的好处不仅可以 批量转换 ,同时一旦脚本写完了以后就可以 一键执行 ,彻底解放双手,那么本文就来盘一盘如何使用Python来将 Word/Excel/PPT/Markdown/Html 等各种格式的文件转换为PDF!

Word转PDF

Word转PDF应该是最常见的需求了,毕竟使用PDF格式可以更方便展示文档,虽然在Word中可以直接导出为PDF格式,但是使用Python可以批量转换,更加高效。

目前在Python中针对Word转换为PDF的库有很多,比如win32就可以调用word底层vba,将word转成pdf,或者comtypes等,但是这些常用的库仅能在Windows机器上运行,所以为了照顾mac用户本文使用一个比较小众的库docx2pdf,看名字就能知道这是专门用于word转pdf,安装很简单

代码语言: javascript
复制
pip install docx2pdf

使用也比win32等库更简洁,一行代码导入一行代码转换即可

代码语言: javascript
复制
from docx2pdf import convert
convert("input.docx", "output.pdf")

但是有人就会说虽然简单,但是这个操作word本身就可以完成,好的接下来放大招,我们可以使用下面的代码 找到当前或者指定文件夹下的全部word文件

代码语言: javascript
复制
#查找当前目录下的全部word文件
import os
import glob
from pathlib import Path
path = os.getcwd() + '/'
p = Path(path) #初始化构造Path对象
FileList=list(p.glob("**/*.docx")) 

接下来只要写一个循环就可以将该目录下的全部word一次性转换为PDF

代码语言: javascript
复制
for file in FileList:
    convert(file,f"{file}.pdf")

就这样, 不到10行代码,只要一秒 ,指定文件夹中5份Word就轻松转换为PDF,现在还能使用我们之前自动化系列文章写过的批量合并PDF结合一键合并这5份PDF!

Excel转PDF

Excel转PDF可能平时用的不多,但是作为Office全家桶中的重要工具,并且转换完的表格可以复制所以我们也讲一下。使用到的工具既不是常用的openpyxl也不是pandas,而是另一个专门用于处理PDF的库fpdf

代码语言: javascript
复制
import pandas as pd
import numpy as np
df_1 = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))

为了方便讲解我们使用Pandas和NumPy来创建一个示例数据文件,当然也可以使用从本地读取

现在可以使用下面的代码将这个表格转换为PDF

代码语言: javascript
复制
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_xy(0, 0)
pdf.set_font('arial', 'B', 14)
pdf.cell(60)
pdf.cell(70, 10, 'Excel to PDF', 0, 2, 'C')
pdf.cell(-40)
pdf.cell(50, 10, 'Index Column', 1, 0, 'C')
pdf.cell(40, 10, 'A', 1, 0, 'C')
pdf.cell(40, 10, 'B', 1, 2, 'C')
pdf.cell(-90)
pdf.set_font('arial', '', 12)
for i in range(0, len(df_1)):
    col_ind = str(i)
    col_a = str(df_1.A.iloc[i])
    col_b = str(df_1.B.iloc[i])
    pdf.cell(50, 10, '%s' % (col_ind), 1, 0, 'C')
    pdf.cell(40, 10, '%s' % (col_a), 0, 0, 'C')
    pdf.cell(40, 10, '%s' % (col_b), 0, 2, 'C')
    pdf.cell(-90)
pdf.output('Excel2PDF.pdf', 'F')

,其实思路和openpyxl类似,遍历每一个单元格并写入数据,只不过现在是往PDF文件中写入。

PPT转PDF

本节介绍一下PPT如何转换为PDF,但是我搜了一大圈都没有MAC用户可以实现的方法,所以只能针对Windows去操作,使用到的就是在word2pdf中讲到的comtypes

代码语言: javascript
复制
import sys
import os
import comtypes.client
#设置路径
input_file_path = sys.argv[1]
output_file_path = sys.argv[2]
input_file_path = os.path.abspath(input_file_path)
output_file_path = os.path.abspath(output_file_path)
#创建PDF
powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
powerpoint.Visible = 1
slides = powerpoint.Presentations.Open(input_file_path)
#保存PDF
slides.SaveAs(output_file_path, 32)
slides.Close()

相关参数与细节可以查阅comtypes官方文档,因为我是mac所以没有过多研究,在成功转换之后就可以和我们之前的批量操作与合并进行结合实现自动化了!

md转pdf

关于markdown转pdf,几乎所有markdown编辑器都支持导出为pdf格式,本以为这个需求并不高,但是研究了一圈发现很多老外造了很多md转pdf的轮子,比如md2pdf、markdown2pdf、md2pdf-client等。因为大多数博客使用的是markdown格式,使用这些库可以很好的将博客文章批量转换为PDF文档存储。

早起都试了一圈,找到一个语法最简单的markdown2pdf3,直接pip安装即可,使用两行代码即可将一个md文件转换为pdf

代码语言: javascript
复制
from markdown2pdf3 import *
convert_markdown_to_pdf('test.md') #你的markdown文件路径

但是要注意的是如果有中文,还需要进行一些额外的设置,可以查阅官方文档,不过现在就能和之前讲的Word转PDF结合, 批量转换 指定路径下的全部markdown文件为pdf,比如可以使用下面的代码找到当前文件夹下的全部md文件

代码语言: javascript
复制
import os
import glob
 
推荐文章
不要命的鸡蛋  ·  excel函数获取excel中json中的值_excel json字符串提取
2 月前
热心肠的香菇  ·  绑定到文档或电子表格中的区域 - Office Add-ins | Microsoft Learn
1 月前
怕老婆的皮带  ·  如何将报表嵌入到第三方系统中_智能商业分析 Quick BI(Quick BI)-阿里云帮助中心
3 周前
急躁的书包  ·  WebView.EvaluateJavascript(String, IValueCallback) Method (Android.Webkit) | Microsoft Learn
1 年前
谦和的马克杯  ·  Qlistwidget刷新界面问题--突然有个item不显示 - 一字千金 - 博客园
1 年前
慷慨的黄豆  ·  在实现VOIP应用时,最好使用SIP协议栈或SIP客户端?
1 年前
高大的海龟  ·  事件绑定_51CTO博客_vue动态绑定click事件
1 年前
飞翔的遥控器  ·  WPF 关于 ComboBox 的数据绑定_wpf combobox 数据绑定_why10260922的博客-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号