往期精選
同一個操作執行兩次,就要考慮自動化!
Word轉PDF應該是最常見的需求了,畢竟使用PDF格式可以更方便展示文檔,雖然在Word中可以直接導出為PDF格式,但是使用Python可以批量轉換,更加高效。
目前在Python中針對Word轉換為PDF的庫有很多,比如win32就可以調用word底層vba,將word轉成pdf,或者comtypes等,但是這些常用的庫僅能在Windows機器上運行,所以為了照顧mac用戶本文使用一個比較小眾的庫docx2pdf,看名字就能知道這是專門用于word轉pdf,安裝很簡單
pip install docx2pdf
使用也比win32等庫更簡潔,一行代碼導入一行代碼轉換即可
from docx2pdf import convert
convert('input.docx', 'output.pdf')
但是有人就會說雖然簡單,但是這個操作word本身就可以完成,好的接下來放大招,我們可以使用下面的代碼找到當前或者指定文件夾下的全部word文件
#查找當前目錄下的全部word文件
import os
import glob
from pathlib import Path
path = os.getcwd() + '/'
p = Path(path) #初始化構造Path對象
FileList=list(p.glob('**/*.docx'))
接下來只要寫一個循環就可以將該目錄下的全部word一次性轉換為PDF
for file in FileList:
convert(file,f'{file}.pdf')
就這樣,不到10行代碼,只要一秒,指定文件夾中5份Word就輕松轉換為PDF,現在還能使用我們之前自動化系列文章寫過的批量合并PDF結合一鍵合并這5份PDF!
Excel轉PDF可能平時用的不多,但是作為Office全家桶中的重要工具,并且轉換完的表格可以復制所以我們也講一下。使用到的工具既不是常用的openpyxl也不是pandas,而是另一個專門用于處理PDF的庫fpdf
import pandas as pd
import numpy as np
df_1 = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
為了方便講解我們使用Pandas和NumPy來創建一個示例數據文件,當然也可以使用從本地讀取
現在可以使用下面的代碼將這個表格轉換為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')
,其實思路和openpyxl類似,遍歷每一個單元格并寫入數據,只不過現在是往PDF文件中寫入。
本節介紹一下PPT如何轉換為PDF,但是我搜了一大圈都沒有MAC用戶可以實現的方法,所以只能針對Windows去操作,使用到的就是在word2pdf中講到的comtypes
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所以沒有過多研究,在成功轉換之后就可以和我們之前的批量操作與合并進行結合實現自動化了!
關于markdown轉pdf,幾乎所有markdown編輯器都支持導出為pdf格式,本以為這個需求并不高,但是研究了一圈發現很多老外造了很多md轉pdf的輪子,比如md2pdf、markdown2pdf、md2pdf-client等。因為大多數博客使用的是markdown格式,使用這些庫可以很好的將博客文章批量轉換為PDF文檔存儲。
早起都試了一圈,找到一個語法最簡單的markdown2pdf3,直接pip安裝即可,使用兩行代碼即可將一個md文件轉換為pdf
from markdown2pdf3 import *
convert_markdown_to_pdf('test.md') #你的markdown文件路徑
但是要注意的是如果有中文,還需要進行一些額外的設置,可以查閱官方文檔,不過現在就能和之前講的Word轉PDF結合,批量轉換指定路徑下的全部markdown文件為pdf,比如可以使用下面的代碼找到當前文件夾下的全部md文件
import os
import glob
from pathlib import Path
path = os.getcwd() + '/'
p = Path(path) #初始化構造Path對象
FileList=list(p.glob('**/*.md'))
關于html也就是網頁轉為PDF是來問我最多的問題,其實很簡單,之前在Selenium爬取公眾號全部文章這篇文章中就提到使用PDFKIT即可,但是并不是直接pip安裝pdfkit就行,我們需要提前進入下面的網站選擇自己電腦系統對應的wkhtmltopdf下載安裝
https://wkhtmltopdf.org/downloads.html
安裝完使用pip安裝pdfkit
pip install pdfkit
現在我們就能使用兩行代碼轉換指定網頁為PDF格式,比如將我的第一篇自動化文章轉為PDF
文末說兩個福利
1.本周依舊給常讀與常分享用戶贈書,目前分享榜單已經送至第八名,也就是本周只要進入分享榜單即可獲得贈書,本周贈書與爬蟲相關,其中包括之前送過的反爬蟲原理與繞過實戰
2.當當網為早起Python讀者申請了一批優惠碼【QTX8B8】,使用該優惠碼購買當當網自營圖書可以120買300的書,相當于4折,如果使用了早起的優惠碼購書可以聯系早小起,將會在活動結束后進行單獨贈書與免單抽獎。使用方法與詳情可以點擊進入昨天的詳細推文!