Python批量實現(xiàn)PDF轉(zhuǎn)換為圖片(JPG/PNG)
本文介紹了一種使用 Python 腳本來完成這項工作的方法,該腳本基于 PyMuPDF、pdf2image 和 win32com 庫實現(xiàn),可以幫助您快速地將 Word 文檔轉(zhuǎn)換為 PDF 文件,并將 PDF 文件轉(zhuǎn)換為 PNG 圖片。
一、安裝所需的庫和軟件
在開始使用該腳本之前,您需要先安裝所需的 Python 模塊和相關(guān)的軟件。具體來說,您需要安裝 PyMuPDF、pdf2image 和 win32com 三個庫,以及 Microsoft Word 軟件和 Poppler 程序。可以通過以下命令來安裝 Python 模塊:
pip install PyMuPDF pip install pdf2image pip install pypiwin32
PyMuPDF 庫用于將 PDF 文件轉(zhuǎn)換為圖片;pdf2image 庫用于將 PDF 文件轉(zhuǎn)換為 PNG 圖片;pypiwin32 庫用于與 Microsoft Word 軟件進行交互和文檔轉(zhuǎn)換。另外,還需要下載并安裝 Microsoft Word 軟件,并將 Poppler 程序的路徑添加到系統(tǒng)環(huán)境變量中。
二、加載并轉(zhuǎn)換 Word 文檔
在完成所需的庫和軟件安裝后,就可以開始使用腳本了。腳本主要分為三個部分,分別是將 Word 文檔轉(zhuǎn)換為 docx 文件、將 docx 文件轉(zhuǎn)換為 PDF 文件、將 PDF 文件轉(zhuǎn)換為 PNG 圖片。
首先,我們需要加載并轉(zhuǎn)換 Word 文檔。在代碼中,我們使用os.listdir()方法讀取指定路徑下的所有文件名,然后使用split()方法將文件名按“.”分割成文件名和文件后綴。如果文件后綴為“doc”,則使用 win32com 庫打開 Word 應(yīng)用程序,并使用 Dispatch() 方法從文檔對象中創(chuàng)建了一個新的 Word 應(yīng)用程序。然后,將相應(yīng)路徑下的當(dāng)前文件打開,并將其轉(zhuǎn)換為 docx 格式文件。最后關(guān)閉 Word 應(yīng)用程序,并等待 3 秒鐘,系統(tǒng)釋放資源。
for i in os.listdir(path):
file_name,file_suffix = i.split(".")
if file_suffix == "doc":
word = Dispatch('Word.Application')
doc = word.Documents.Open(path+f"{i}")
# 將 Word 文檔轉(zhuǎn)換為 docx 格式文件
doc.SaveAs(path+f"{file_name}.docx",FileFormat=12)
print(i,"轉(zhuǎn)換完成")
doc.Close()
word.Quit()
sleep(3)
SaveAs() 方法接受兩個參數(shù),分別是輸出文件路徑和輸出文件格式。其中,F(xiàn)ileFormat 參數(shù)用于指定輸出文件的格式,12 表示輸出為 docx 格式文件
三、加載并轉(zhuǎn)換 pdf文檔
將上訴代碼修改為:
# 將 Word 文檔轉(zhuǎn)換為 docx 格式文件
doc.SaveAs(path+f"{file_name}.docx",FileFormat=17)
FileFormat 參數(shù)用于指定輸出文件的格式,17 表示輸出為 PDF 格式文件。
四、將 PDF 文件轉(zhuǎn)換為 PNG 圖片
完成 PDF 文件的轉(zhuǎn)換后,我們就可以將其轉(zhuǎn)換為 PNG 圖片了。在代碼中,我們使用 PyMuPDF 庫打開指定路徑下的 PDF 文件,并獲取該文件的總頁數(shù)。然后,使用 pdf2image 庫中的 convert_from_path() 方法遍歷 PDF 中的每一頁,并將其轉(zhuǎn)換為 PNG 格式的圖片。最后,將 PNG 圖片保存到指定路徑下,并輸出轉(zhuǎn)換進度。
for filename in os.listdir(path):
if filename.endswith(".pdf"):
# 獲取當(dāng)前 PDF 文件的總頁數(shù)
doc = fitz.open(path + filename)
total_pages = doc.page_count
doc.close()
print(f"正在轉(zhuǎn)換 {filename},共 {total_pages} 頁...")
for i, page in enumerate(convert_from_path(path + filename, grayscale=False), start=1):
# 構(gòu)造文件名
output_filename = os.path.splitext(filename)[0] + "_" + str(i) + ".png"
# 保存圖片
page.save(path_images + output_filename, "png")
# 輸出轉(zhuǎn)換進度
print(f"已完成第 {i}/{total_pages} 頁的轉(zhuǎn)換")
五、完整代碼
# -*- coding: utf-8 -*-
"""
Created on Wed May 31 17:10:27 2023
@author: ypzhao
"""
import os
import fitz
from pdf2image import convert_from_path
from time import sleep
from win32com.client import Dispatch
# 定義PDF文件路徑和輸出區(qū)間路徑
# 待轉(zhuǎn)換pdf文件路徑
path = "C:/Users/ypzhao/Desktop/pdf/"
# doc/docx轉(zhuǎn)換后的路徑
path_convert = "C:/Users/ypzhao/Desktop/pdf/"
# 轉(zhuǎn)換后的圖片路徑
path_images = "C:/Users/ypzhao/Desktop/images/"
print("-----doc開始轉(zhuǎn)換為docx-----")
for i in os.listdir(path):
file_name,file_suffix = i.split(".")
if file_suffix == "doc":
word = Dispatch('Word.Application')
doc = word.Documents.Open(path+f"{i}")
doc.SaveAs(path+f"{file_name}.docx",FileFormat=12)
print(i,"轉(zhuǎn)換完成")
doc.Close()
word.Quit()
sleep(3)
print("-----開始轉(zhuǎn)換為pdf-----")
for i in os.listdir(path):
file_name,file_suffix = i.split(".")
if file_suffix == "docx":
word = Dispatch('Word.Application')
doc = word.Documents.Open(path+f"{i}")
doc.SaveAs(path_convert+f"{file_name}.pdf",FileFormat=17)
print(i,"...轉(zhuǎn)換完成")
doc.Close()
word.Quit()
sleep(3)
else:
pass
# 循環(huán)遍歷PDF文件,并轉(zhuǎn)換為圖片
for filename in os.listdir(path):
if filename.endswith(".pdf"):
# 獲取當(dāng)前 PDF 文件的總頁數(shù)
doc = fitz.open(path + filename)
total_pages = doc.page_count
doc.close()
print(f"正在轉(zhuǎn)換 {filename},共 {total_pages} 頁...")
#按照原圖輸出pdf文件為word
#若想黑白輸出pdf為圖片格式,修改grayscale=False為grayscale=True
for i, page in enumerate(convert_from_path(path + filename, grayscale=False), start=1):
# 構(gòu)造文件名
output_filename = os.path.splitext(filename)[0] + "_" + str(i) + ".png"
# 保存圖片
page.save(path_images + output_filename, "png")
# 輸出轉(zhuǎn)換進度
print(f"已完成第 {i}/{total_pages} 頁的轉(zhuǎn)換")
print("-----已完成所有轉(zhuǎn)換-----")
到此這篇關(guān)于Python批量實現(xiàn)PDF轉(zhuǎn)換為圖片(JPG/PNG)的文章就介紹到這了,更多相關(guān)Python PDF轉(zhuǎn)圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Pytorch的MLP模塊實現(xiàn)方式
今天小編就為大家分享一篇關(guān)于Pytorch的MLP模塊實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python現(xiàn)代項目開發(fā)之uv安裝配置與最佳實踐指南
uv?是由?Astral?公司開發(fā)的?Rust?編寫的?Python?工具鏈,核心優(yōu)勢是極速,功能全面,下面小編就和大家詳細介紹一下uv安裝配置與最佳實踐2026-03-03
Python基礎(chǔ)之?dāng)?shù)據(jù)類型相關(guān)知識總結(jié)
眾所周知,在Python中,常用的數(shù)據(jù)類型有三種,分別是字符串、整數(shù)和浮點數(shù).在Python基礎(chǔ)學(xué)習(xí)的過程中,數(shù)據(jù)類型是初學(xué)者常常容易混淆的一個基礎(chǔ)知識點,本文為大家詳細總結(jié)了三種數(shù)據(jù)類型的概念、數(shù)據(jù)類型的查詢以及更為復(fù)雜的數(shù)據(jù)轉(zhuǎn)化,需要的朋友可以參考下2021-06-06
Python XML轉(zhuǎn)Json之XML2Dict的使用方法
今天小編就為大家分享一篇Python XML轉(zhuǎn)Json之XML2Dict的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

