当前位置: 首页 > 后端技术 > Python

用python转换PDF-Word-Excel-PPT等!

时间:2023-03-26 15:31:40 Python

作者:刘早起来源:早起Python大家好,又到了PythonOA的话题。今天就来说说大家肯定会接触到的PDF转换。有很多第三方工具和网站可以将各种格式的文件转换为PDF,但是使用Python的好处不仅在于可以批量转换,而且脚本写完一次。一键执行,彻底解放你的双手,那么本文将带你使用Python将Word/Excel/PPT/Markdown/Html等多种格式的文件转PDF!Word转PDFWord转PDF应该是最常见的需求了。毕竟以PDF格式显示文档更方便。虽然在Word中可以直接导出为PDF格式,但是可以用Python批量转换,效率更高。目前,Python中有很多用于将Word转换为PDF的库。比如win32可以调用word的底层vba将word转成pdf,或者comtypes等,但是这些常用的库只能在windows机器上运行,所以为了照顾mac用户使用比较小的库本文中的docx2pdf。看名字就知道是专门用来把word转pdf的。安装非常简单。pipinstalldocx2pdf的使用也比win32等库更加简洁。一行代码导入一行代码转换fromdocx2pdfimportconvertconvert("input.docx","output.pdf")但是有人会说,虽然简单,但是这个操作word自己就可以完成。好了,我们放大一点,我们可以使用下面的代码来查找当前或指定文件文件夹下的所有word文件查找当前目录下的所有word文件importosimportglobfrompathlibimportPathpath=os.getcwd()+'/'p=Path(path)#初始化构造Path对象FileList=list(p.glob("*/.docx"))接下来只需要写一个循环,将目录下的所有单词一次性转成PDFforfileinFileList:convert(file,f"{file}.pdf")就这样,不到10行代码就可以轻松将指定文件夹中的5份Word一秒轻松转换为PDF,现在我们也可以使用我们之前自动化系列写的批量合并PDF,一键合并这5个PDF!Excel转PDFExcel转PDF可能用的不多,但是作为Office全家桶中的重要工具,而且转换后的表格可以复制,所以说说吧。使用的工具既不是常用的openpyxl也不是pandas,而是另一个库fpdfimportpandasaspdimportnumpyasnpdf_1=pd.DataFrame(np.random.randn(10,2),columns=list('AB'))为了方便说明一下,我们使用Pandas和NumPy创建了一个示例数据文件,当然你也可以使用本地阅读现在你可以使用下面的代码将这个表格转换为PDFfromfpdfimportFPDFpdf=FPDF()pdf.add_page()pdf.set_xy(0,0)pdf.set_font('arial','B',14)pdf.cell(60)pdf.cell(70,10,'Excel转PDF',0,2,'C')pdf.cell(-40)pdf.cell(50,10,'索引列',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)foriinrange(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中提到的comtypesimportsysimportosimportcomtypes.clientsetpathinput_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)创建PDFpowerpoint=comtypes.client.CreateObject("Powerpoint.Application")powerpoint.Visible=1slides=powerpoint.Presentations.Open(input_file_path)SavePDFslides.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。frommarkdown2pdf3import*convert_markdown_to_pdf('test.md')#你的markdown文件不过需要注意的是,如果有中文,还需要一些额外的设置。可以参考官方文档,现在可以结合前面提到的Word转PDF,将指定路径下的所有markdown文件批量转为pdf。比如你可以使用下面的代码查找当前文件夹下的所有md文件importosimportglobfrompathlibimportPathpath=os.getcwd()+'/'p=Path(path)#初始化并构造Path对象FileList=list(p.glob("*/.md"))html转pdf关于html,也就是网页转PDF,是我问的最多的问题。其实很简单。在爬取Selenium中公众号的所有文章之前,我在这篇文章中提到了使用PDFKIT,但是直接用pip安装pdfkit是不够的。我们需要提前进入如下网址,选择自己电脑系统对应的wkhtmltopdf下载安装https://wkhtmltopdf.org/downl...安装完成后,使用pip安装pdfkitpipinstallpdfkit现在我们可以使用两行将指定网页转换为PDF格式的代码。例如,将我的第一篇自动化文章转换为PDF看起来非常好。所有格式,包括代码,都被完全保留。接下来我不需要做任何事情。话说回来,比如你想把一个公众号的所有文章下载成PDF格式,那么先把历史文章的网址提取出来,然后用pdfkit进行转换,这两个步骤我们已经详细解释过了!