
作者:劉早起
來(lái)源:早起Python
大家好,又到了python辦公自動(dòng)化專(zhuān)題。今天講的是各位一定會(huì)接觸到的PDF轉(zhuǎn)換,關(guān)于各種格式的文件轉(zhuǎn)換為PDF有很多第三方工具與網(wǎng)站可以實(shí)現(xiàn),但是使用Python的好處不僅可以批量轉(zhuǎn)換,同時(shí)一旦腳本寫(xiě)完了以后就可以一鍵執(zhí)行,徹底解放雙手,那么本文就來(lái)盤(pán)一盤(pán)如何使用Python來(lái)將Word/Excel/PPT/Markdown/Html等各種格式的文件轉(zhuǎn)換為PDF!
Word轉(zhuǎn)PDF
Word轉(zhuǎn)PDF應(yīng)該是最常見(jiàn)的需求了,畢竟使用PDF格式可以更方便展示文檔,雖然在Word中可以直接導(dǎo)出為PDF格式,但是使用Python可以批量轉(zhuǎn)換,更加高效。
目前在Python中針對(duì)Word轉(zhuǎn)換為PDF的庫(kù)有很多,比如win32就可以調(diào)用word底層vba,將word轉(zhuǎn)成pdf,或者comtypes等,但是這些常用的庫(kù)僅能在Windows機(jī)器上運(yùn)行,所以為了照顧mac用戶(hù)本文使用一個(gè)比較小眾的庫(kù)docx2pdf,看名字就能知道這是專(zhuān)門(mén)用于word轉(zhuǎn)pdf,安裝很簡(jiǎn)單
pip install docx2pdf
使用也比win32等庫(kù)更簡(jiǎn)潔,一行代碼導(dǎo)入一行代碼轉(zhuǎn)換即可
from docx2pdf import convert convert("input.docx", "output.pdf")
但是有人就會(huì)說(shuō)雖然簡(jiǎn)單,但是這個(gè)操作word本身就可以完成,好的接下來(lái)放大招,我們可以使用下面的代碼找到當(dāng)前或者指定文件夾下的全部word文件
#查找當(dāng)前目錄下的全部word文件 import os import glob from pathlib import Path path = os.getcwd() + '/' p = Path(path) #初始化構(gòu)造Path對(duì)象 FileList=list(p.glob("**/*.docx"))
接下來(lái)只要寫(xiě)一個(gè)循環(huán)就可以將該目錄下的全部word一次性轉(zhuǎn)換為PDF
for file in FileList: convert(file,f"{file}.pdf")
就這樣,不到10行代碼,只要一秒,指定文件夾中5份Word就輕松轉(zhuǎn)換為PDF,現(xiàn)在還能使用我們之前自動(dòng)化系列文章寫(xiě)過(guò)的批量合并PDF結(jié)合一鍵合并這5份PDF!
Excel轉(zhuǎn)PDF
Excel轉(zhuǎn)PDF可能平時(shí)用的不多,但是作為Office全家桶中的重要工具,并且轉(zhuǎn)換完的表格可以復(fù)制所以我們也講一下。使用到的工具既不是常用的openpyxl也不是pandas,而是另一個(gè)專(zhuān)門(mén)用于處理PDF的庫(kù)fpdf
import pandas as pd import numpy as np df_1 = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
為了方便講解我們使用Pandas和NumPy來(lái)創(chuàng)建一個(gè)示例數(shù)據(jù)文件,當(dāng)然也可以使用從本地讀取
現(xiàn)在可以使用下面的代碼將這個(gè)表格轉(zhuǎn)換為PDF
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')
,其實(shí)思路和openpyxl類(lèi)似,遍歷每一個(gè)單元格并寫(xiě)入數(shù)據(jù),只不過(guò)現(xiàn)在是往PDF文件中寫(xiě)入。
PPT轉(zhuǎn)PDF
本節(jié)介紹一下PPT如何轉(zhuǎn)換為PDF,但是我搜了一大圈都沒(méi)有MAC用戶(hù)可以實(shí)現(xiàn)的方法,所以只能針對(duì)Windows去操作,使用到的就是在word2pdf中講到的comtypes
import sys import os import comtypes.client #設(shè)置路徑 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) #創(chuàng)建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()
相關(guān)參數(shù)與細(xì)節(jié)可以查閱comtypes官方文檔,因?yàn)槲沂莔ac所以沒(méi)有過(guò)多研究,在成功轉(zhuǎn)換之后就可以和我們之前的批量操作與合并進(jìn)行結(jié)合實(shí)現(xiàn)自動(dòng)化了!
md轉(zhuǎn)pdf
關(guān)于markdown轉(zhuǎn)pdf,幾乎所有markdown編輯器都支持導(dǎo)出為pdf格式,本以為這個(gè)需求并不高,但是研究了一圈發(fā)現(xiàn)很多老外造了很多md轉(zhuǎn)pdf的輪子,比如md2pdf、markdown2pdf、md2pdf-client等。因?yàn)榇蠖鄶?shù)博客使用的是markdown格式,使用這些庫(kù)可以很好的將博客文章批量轉(zhuǎn)換為PDF文檔存儲(chǔ)。
早起都試了一圈,找到一個(gè)語(yǔ)法最簡(jiǎn)單的markdown2pdf3,直接pip安裝即可,使用兩行代碼即可將一個(gè)md文件轉(zhuǎn)換為pdf
from markdown2pdf3 import * convert_markdown_to_pdf('test.md') #你的markdown文件路徑
但是要注意的是如果有中文,還需要進(jìn)行一些額外的設(shè)置,可以查閱官方文檔,不過(guò)現(xiàn)在就能和之前講的Word轉(zhuǎn)PDF結(jié)合,批量轉(zhuǎn)換指定路徑下的全部markdown文件為pdf,比如可以使用下面的代碼找到當(dāng)前文件夾下的全部md文件
import os import glob from pathlib import Path path = os.getcwd() + '/' p = Path(path) #初始化構(gòu)造Path對(duì)象 FileList=list(p.glob("**/*.md"))
html轉(zhuǎn)pdf
關(guān)于html也就是網(wǎng)頁(yè)轉(zhuǎn)為PDF是來(lái)問(wèn)我最多的問(wèn)題,其實(shí)很簡(jiǎn)單,之前在Selenium爬取公眾號(hào)全部文章這篇文章中就提到使用PDFKIT即可,但是并不是直接pip安裝pdfkit就行,我們需要提前進(jìn)入下面的網(wǎng)站選擇自己電腦系統(tǒng)對(duì)應(yīng)的wkhtmltopdf下載安裝
https://wkhtmltopdf.org/downloads.html
安裝完使用pip安裝pdfkit
pip install pdfkit
現(xiàn)在我們就能使用兩行代碼轉(zhuǎn)換指定網(wǎng)頁(yè)為PDF格式,比如將我的第一篇自動(dòng)化文章轉(zhuǎn)為PDF
看起來(lái)效果還是非常好的,所有格式包括代碼都完整的保存了下來(lái),接下來(lái)怎么做就不用我多說(shuō)了,比如你想下載一個(gè)公眾號(hào)所有文章為PDF格式,那就先將歷史文章URL提取出來(lái),接著使用pdfkit轉(zhuǎn)換即可,而這兩步驟我們都已經(jīng)詳細(xì)講解過(guò)了!
——熱門(mén)課程推薦:
想從事業(yè)務(wù)型數(shù)據(jù)分析師,您可以點(diǎn)擊>>>“數(shù)據(jù)分析師”了解課程詳情;
想從事大數(shù)據(jù)分析師,您可以點(diǎn)擊>>>“大數(shù)據(jù)就業(yè)”了解課程詳情;
想成為人工智能工程師,您可以點(diǎn)擊>>>“人工智能就業(yè)”了解課程詳情;
想了解Python數(shù)據(jù)分析,您可以點(diǎn)擊>>>“Python數(shù)據(jù)分析師”了解課程詳情;
想咨詢(xún)互聯(lián)網(wǎng)運(yùn)營(yíng),你可以點(diǎn)擊>>>“互聯(lián)網(wǎng)運(yùn)營(yíng)就業(yè)班”了解課程詳情;
想了解更多優(yōu)質(zhì)課程,請(qǐng)點(diǎn)擊>>>
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶(hù) ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱(chēng) BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢(xún)到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢(xún)結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢(xún)結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專(zhuān)注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專(zhuān)業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03