利用Python實現(xiàn)文檔格式互轉(zhuǎn)的操作大全(PDF、Word、圖片、Markdown)
前言: 文檔格式不統(tǒng)一,轉(zhuǎn)換麻煩
我們在日常生活中經(jīng)常碰到這樣的場景。
客戶要求提交簡歷必須是PDF,但你只有Word版,手動轉(zhuǎn)換后格式全亂。
需要從PDF報告中提取圖表,卻發(fā)現(xiàn)無法直接復制,只能一張張截圖。
制作演示文稿,收集到的圖片大小、格式五花八門,插入后需要反復調(diào)整。
我們今天將手把手教你如何利用Python,輕松實現(xiàn):
PDF與圖片互轉(zhuǎn): 批量提取PDF中的圖片,或?qū)⒍鄨D合為PDF。
Word與PDF互轉(zhuǎn): 輕松實現(xiàn)Word批量轉(zhuǎn)PDF,甚至嘗試PDF轉(zhuǎn)Word。
Markdown文檔轉(zhuǎn)換: 讓你的極客筆記瞬間變成專業(yè)PDF/Word報告。
最終,你將擁有一個強大的文檔格式轉(zhuǎn)換工廠,
讓你的文件管理和傳輸效率翻倍,老板看了都點贊!
1.PDF與圖片互轉(zhuǎn):批量處理
PDF雖然方便查看,但要提取其中的圖片或?qū)⒋罅繄D片打包成PDF,手動操作非常麻煩。
Python能幫你批量處理這些需求,實現(xiàn)PDF轉(zhuǎn)圖片和圖片轉(zhuǎn)PDF的自動化!
如何實現(xiàn)呢?
PDF轉(zhuǎn)圖片: PyMuPDF可以渲染PDF頁面,并將其保存為圖片。
圖片轉(zhuǎn)PDF: Pillow可以創(chuàng)建圖片,PyMuPDF可以將圖片插入到PDF頁面。
1.1DF轉(zhuǎn)多張圖片:將PDF內(nèi)容提取為圖像
場景: 你收到一份有插圖的PDF報告,想把里面的圖表或每一頁都提取出來作為圖片素材,用于
PPT或網(wǎng)頁展示。手動截圖不僅分辨率低,還耗時。
方案: 利用PyMuPDF,可以批量將PDF的每一頁高質(zhì)量地轉(zhuǎn)換為圖片,并支持多種圖片格式和分辨率。
安裝:
pip install PyMuPDF
代碼:
import fitz # PyMuPDF
import os
def pdf_to_images(pdf_path, output_folder, img_format="png", dpi=200):
"""
將PDF文件的每一頁轉(zhuǎn)換為一張圖片。
這是PDF轉(zhuǎn)圖片和Python文件轉(zhuǎn)換的核心功能。
:param pdf_path: 源PDF文件路徑
:param output_folder: 圖片輸出文件夾
:param img_format: 輸出圖片格式 (如 "png", "jpeg", "jpg")
:param dpi: 圖片分辨率 (Dots Per Inch),DPI越高圖片越清晰但文件越大
"""
if not os.path.exists(pdf_path): return print(f"? PDF文件不存在:{pdf_path}")
os.makedirs(output_folder, exist_ok=True)
print(f"?? 正在將 '{os.path.basename(pdf_path)}' 轉(zhuǎn)換為多張圖片...")
try:
doc = fitz.open(pdf_path)
zoom = dpi / 72 # 計算縮放比例 (1英寸=72點)
mat = fitz.Matrix(zoom, zoom) # 縮放矩陣
for page_num in range(doc.page_count):
page = doc.load_page(page_num)
pix = page.get_pixmap(matrix=mat) # 獲取頁面的像素圖
output_image_path = os.path.join(output_folder, f"{os.path.splitext(os.path.basename(pdf_path))[0]}_page_{page_num+1}.{img_format}")
# 保存像素圖為圖片文件
pix.save(output_image_path)
print(f" ? 已生成圖片:'{os.path.basename(output_image_path)}'")
doc.close()
print(f"? PDF批量轉(zhuǎn)圖片完成!結(jié)果保存到:'{output_folder}'")
return True
except Exception as e:
print(f"? PDF轉(zhuǎn)圖片失敗:{e}")
return False
if __name__ == "__main__":
# 準備測試PDF文件 (多頁,包含文本和可能圖片)
source_pdf = os.path.expanduser("~/Desktop/presentation.pdf")
if not os.path.exists(source_pdf):
doc = fitz.open()
p1 = doc.new_page(); p1.insert_text(fitz.Point(50,50), "第一頁內(nèi)容和圖表");
p2 = doc.new_page(); p2.insert_text(fitz.Point(50,50), "第二頁內(nèi)容");
doc.save(source_pdf); doc.close()
output_images_folder = os.path.expanduser("~/Desktop/PDF轉(zhuǎn)圖片結(jié)果")
# 示例1:將PDF轉(zhuǎn)換為PNG圖片,分辨率200DPI
pdf_to_images(source_pdf, output_images_folder, img_format="png", dpi=200)
# 示例2:轉(zhuǎn)換為JPG圖片,分辨率300DPI (更高質(zhì)量,更大文件)
# pdf_to_images(source_pdf, os.path.join(os.path.dirname(output_images_folder), "PDF_to_JPG"), img_format="jpg", dpi=300)
操作:
安裝庫: pip install PyMuPDF。
準備PDF文件: 在桌面準備一個多頁PDF(如presentation.pdf)。
修改代碼路徑和參數(shù): 修改 source_pdf、output_images_folder 和 img_format/dpi。
運行: 運行 python pdf_to_images.py。
效果展示:


1.2多張圖片合并為一張PDF:快速制作PDF文檔
場景: 你有大量圖片(如掃描件、產(chǎn)品圖集、幻燈片截圖),需要將它們快速整理成一份PDF文檔,方便分享或存檔。
方案: PyMuPDF能讓你將多張圖片一鍵合并為一張多頁PDF文檔,并可以控制每張圖片在PDF中的顯示方式。
代碼:
import fitz # PyMuPDF
from PIL import Image # 用于處理圖片
import os
def images_to_pdf(image_paths, output_pdf_path):
"""
將多張圖片合并為一個PDF文件。
這是Python文件轉(zhuǎn)換和圖片轉(zhuǎn)PDF的核心功能。
:param image_paths: 包含所有要合并的圖片文件路徑的列表
:param output_pdf_path: 輸出PDF文件路徑
"""
if not image_paths: return print("? 沒有提供圖片文件路徑。")
os.makedirs(os.path.dirname(output_pdf_path), exist_ok=True)
print(f"?? 正在合并 {len(image_paths)} 張圖片到 '{os.path.basename(output_pdf_path)}'...")
doc = fitz.open() # 創(chuàng)建一個新的PDF文檔
try:
for img_path in image_paths:
if not os.path.exists(img_path):
print(f"?? 圖片文件不存在,跳過:{os.path.basename(img_path)}")
continue
# 為每張圖片創(chuàng)建一個新頁面
# fitz.open(img_path) 可以直接打開圖片文件作為PDF文檔處理
img_doc = fitz.open(img_path)
new_page_width = img_doc[0].rect.width
new_page_height = img_doc[0].rect.height
img_doc.close() # 關(guān)閉臨時文檔
# 創(chuàng)建一個新頁面,尺寸與圖片匹配 (或者使用A4尺寸,然后縮放圖片)
page = doc.new_page(width=new_page_width, height=new_page_height)
# 插入圖片到頁面 (覆蓋整個頁面)
rect = page.rect # 頁面大小
page.insert_image(rect, filename=img_path)
print(f" ? 已添加圖片:'{os.path.basename(img_path)}' 到PDF。")
doc.save(output_pdf_path)
print(f"? 圖片合并到PDF完成!結(jié)果保存到:'{output_pdf_path}'")
return True
except Exception as e:
print(f"? 圖片合并到PDF失?。簕e}")
return False
finally:
doc.close()
if __name__ == "__main__":
# 準備測試圖片文件 (多張)
img1_path = os.path.expanduser("~/Desktop/scan_page1.png")
img2_path = os.path.expanduser("~/Desktop/scan_page2.png")
output_pdf = os.path.expanduser("~/Desktop/scanned_document.pdf")
# 簡單創(chuàng)建模擬圖片文件
if not os.path.exists(img1_path):
Image.new('RGB', (800, 600), color = 'red').save(img1_path)
if not os.path.exists(img2_path):
Image.new('RGB', (800, 600), color = 'blue').save(img2_path)
images_to_convert = [img1_path, img2_path]
images_to_pdf(images_to_convert, output_pdf)
步驟:
安裝庫: pip install PyMuPDF Pillow。
準備圖片文件: 在桌面準備多張圖片文件(如scan_page1.png, scan_page2.png)。
修改代碼路徑: 修改 images_to_convert 列表中的路徑和 output_pdf。
運行: 運行 python images_to_pdf.py。
效果展示:

2.實現(xiàn)Word與PDF互轉(zhuǎn):一鍵搞定報告、合同格式!
Word和PDF是職場中最常用的兩種文檔格式。Python能幫你一鍵在它們之間進行高效轉(zhuǎn)換,徹底告別文檔格式不統(tǒng)一的煩惱!
實現(xiàn):
Word轉(zhuǎn)PDF: 通常需要借助外部工具或虛擬打印功能,因為它涉及Word文檔的渲染。docx2pdf是一個不錯的選擇。
PDF轉(zhuǎn)Word: 這是一個挑戰(zhàn)性任務(wù),因為PDF主要用于顯示,不含結(jié)構(gòu)信息。雖然有庫能提取文本,但保留原始排版非常困難
2.1Word批量轉(zhuǎn)PDF:最常見的文檔分發(fā)需求
場景: 你需要將幾十份Word報告或合同轉(zhuǎn)換成PDF格式,方便分發(fā)和防止篡改。手動另存為PDF,效率低下。
方案: docx2pdf庫能幫你一鍵批量將Word文檔轉(zhuǎn)換為PDF,并保持良好的格式。
代碼:
from docx2pdf import convert # 導入轉(zhuǎn)換函數(shù)
import os
def batch_word_to_pdf(source_folder, output_folder):
"""
批量將Word文檔轉(zhuǎn)換為PDF文件。
這是Word轉(zhuǎn)PDF和Python文件轉(zhuǎn)換的核心功能。
:param source_folder: 源Word文檔文件夾路徑
:param output_folder: 輸出PDF文件文件夾
"""
if not os.path.exists(source_folder): return print(f"? 源文件夾不存在:{source_folder}")
os.makedirs(output_folder, exist_ok=True)
print(f"?? 正在批量將 '{source_folder}' 下的Word文檔轉(zhuǎn)換為PDF...")
processed_count = 0
# 遍歷文件夾中的所有.docx文件
for filename in os.listdir(source_folder):
if filename.lower().endswith('.docx'):
source_path = os.path.join(source_folder, filename)
output_pdf_path = os.path.join(output_folder, os.path.splitext(filename)[0] + ".pdf")
try:
# **核心操作:調(diào)用 docx2pdf.convert()**
convert(source_path, output_pdf_path)
print(f" ? 轉(zhuǎn)換成功:'{filename}' -> '{os.path.basename(output_pdf_path)}'")
processed_count += 1
except Exception as e:
print(f"? 轉(zhuǎn)換 '{filename}' 失敗:{e}。請確保Office/WPS等已安裝。")
else:
print(f"?? 跳過非Word文件:{filename}")
print(f"? Word批量轉(zhuǎn)PDF完成!共轉(zhuǎn)換 {processed_count} 個文件。")
return True
if __name__ == "__main__":
# 準備測試Word文檔 (放入一些.docx文件)
source_word_folder = os.path.expanduser("~/Desktop/MyWordReports")
output_pdf_folder = os.path.expanduser("~/Desktop/PDFReports")
os.makedirs(source_word_folder, exist_ok=True)
# 簡單創(chuàng)建模擬Word文檔
from docx import Document as DocxDocument
if not os.path.exists(os.path.join(source_word_folder, "report1.docx")):
doc = DocxDocument(); doc.add_paragraph("這是報告1"); doc.save(os.path.join(source_word_folder, "report1.docx"))
if not os.path.exists(os.path.join(source_word_folder, "contract.docx")):
doc = DocxDocument(); doc.add_paragraph("這是一份合同"); doc.save(os.path.join(source_word_folder, "contract.docx"))
batch_word_to_pdf(source_word_folder, output_pdf_folder)
步驟:
安裝庫: pip install docx2pdf。注意:docx2pdf庫需要你的系統(tǒng)安裝了Microsoft Office Word、WPS Office或LibreOffice,它會調(diào)用這些軟件進行轉(zhuǎn)換。
準備Word文件: 在桌面創(chuàng)建MyWordReports文件夾,放入一些.docx文件。
修改代碼路徑: 修改 source_word_folder 和 output_pdf_folder。
運行: 運行 python word_to_pdf.py。

效果展示:

2.2PDF轉(zhuǎn)Word:挑戰(zhàn)與限制并存的“逆向工程”
場景: 你收到一份PDF文檔,但需要對其內(nèi)容進行編輯,或提取其結(jié)構(gòu)化信息到Word中。PDF的固定格式讓你束手無策。
方案: PDF轉(zhuǎn)Word是一個非常困難的“逆向工程”! 因為PDF是用來“顯示”的,它不包含Word那樣的段落、字體、樣式等結(jié)構(gòu)化信息。
難點:Python庫(如pdfminer.six、PyMuPDF用于提取文本,但要完美還原Word格式,幾乎不可能。通常需要借助外部專業(yè)工具(如Adobe Acrobat、在線轉(zhuǎn)換器)或復雜的OCR技術(shù)。PyMuPDF可以提取文本,但排版還原困難。
代碼:
import fitz # PyMuPDF
import os
def pdf_to_text(pdf_path, output_txt_path):
"""
從PDF文件中提取純文本內(nèi)容。
這是PDF轉(zhuǎn)Word(文本部分)的基礎(chǔ)。
:param pdf_path: 源PDF文件路徑
:param output_txt_path: 輸出文本文件路徑
"""
if not os.path.exists(pdf_path): return print(f"? PDF文件不存在:{pdf_path}")
os.makedirs(os.path.dirname(output_txt_path), exist_ok=True)
print(f"?? 正在從 '{os.path.basename(pdf_path)}' 提取文本...")
try:
doc = fitz.open(pdf_path)
text_content = ""
for page_num in range(doc.page_count):
page = doc.load_page(page_num)
text_content += page.get_text() # 提取頁面所有文本
doc.close()
with open(output_txt_path, "w", encoding="utf-8") as f:
f.write(text_content)
print(f"? 文本提取成功!保存到:'{output_txt_path}'")
return True
except Exception as e:
print(f"? 文本提取失敗:{e}")
return False
if __name__ == "__main__":
source_pdf = os.path.expanduser("~/Desktop/sample_pdf.pdf")
output_txt = os.path.expanduser("~/Desktop/extracted_text.txt")
# 簡單創(chuàng)建模擬PDF文件
if not os.path.exists(source_pdf):
doc = fitz.open(); doc.new_page().insert_text((50,50), "這是PDF中的文本內(nèi)容。"); doc.save(source_pdf); doc.close()
pdf_to_text(source_pdf, output_txt)
步驟:
安裝庫: pip install PyMuPDF。
準備PDF文件: 在桌面準備一個包含文本的PDF文件(如sample_pdf.pdf)。
修改代碼路徑: 修改 source_pdf 和 output_txt。
運行: 運行 python pdf_to_text.py。
效果展示:

3.Python實現(xiàn)Markdown轉(zhuǎn)PDF/Word
Markdown是一種輕量級標記語言,它讓你用純文本輕松寫作,并能方便地轉(zhuǎn)換為各種文檔格式。Python結(jié)合pandoc(一個強大的文檔轉(zhuǎn)換工具)或特定的Markdown解析庫,能幫你實現(xiàn)Markdown轉(zhuǎn)PDF或Markdown轉(zhuǎn)Word,這是Python文件轉(zhuǎn)換的高階應(yīng)用!
作用: Markdown文件通過解析器轉(zhuǎn)換為中間格式(如HTML),再由渲染器轉(zhuǎn)換為目標格式。pandoc是命令行工具,Python可以調(diào)用它。
3.1Markdown語法速覽:簡潔高效的寫作方式
Markdown語法簡單直觀,常用語法如下:
| 語法 | 效果 | 示例 |
|---|---|---|
| # 標題 | 一級標題 | # 這是標題 |
| 粗體 | 粗體 | 重要 |
| 斜體 | 斜體 | 強調(diào) |
| - 列表項 | 無序列表 | - 項目1 |
| 1. 列表項 | 有序列表 | 1. 步驟1 |
| 鏈接 | 超鏈接 | CSDN |
代碼 | 行內(nèi)代碼 | print() |
| 代碼塊 | python ... |
3.2Markdown轉(zhuǎn)PDF/Word:用Python打通文檔生態(tài)
場景: 你用Markdown寫了大量筆記和文檔,現(xiàn)在需要將它們導出為專業(yè)排版的PDF報告或Word文檔,方便分享給非技術(shù)人員。
方案: 我們可以通過Python調(diào)用pandoc命令行工具,實現(xiàn)Markdown文件到PDF或Word的轉(zhuǎn)換。這需要你的系統(tǒng)安裝pandoc。
安裝Pandoc:
訪問Pandoc官網(wǎng) (pandoc.org) 下載并安裝。安裝后,確保pandoc已添加到系統(tǒng)環(huán)境變量。
在終端運行 pandoc --version 驗證安裝。
代碼:
步驟:
安裝Pandoc: 從pandoc.org下載并安裝,并確保其添加到系統(tǒng)PATH。如果轉(zhuǎn)PDF,你還需要安裝一個LaTeX發(fā)行版(如MiKTeX for Windows, TeX Live for Linux/macOS)。
準備Markdown文件: 在桌面創(chuàng)建my_notes.md。
修改代碼路徑: 修改 source_md 等路徑。
運行: 運行 python markdown_converter.py。
效果展示:

4.你的“文檔格式轉(zhuǎn)換工廠”!
我們深入學習了PyMuPDF、Pillow、docx2pdf、subprocess等庫/工具,實現(xiàn)了:
PDF與圖片互轉(zhuǎn): 輕松將PDF頁面批量轉(zhuǎn)換為圖片,或?qū)⒍鄰垐D片合并為PDF,實現(xiàn)像素級掌控。
Word與PDF互轉(zhuǎn): 一鍵批量將Word轉(zhuǎn)PDF,并知曉PDF轉(zhuǎn)Word的挑戰(zhàn)與提取文本方法。
Markdown文檔轉(zhuǎn)換: 利用pandoc,將Markdown筆記轉(zhuǎn)換為專業(yè)的PDF/Word文檔。
5.尾聲:文檔格式互轉(zhuǎn),解鎖文件管理新維度!
通過本篇文章,你已經(jīng)掌握了文檔格式互轉(zhuǎn)的強大能力,為你的辦公自動化之旅又增添了一個重量級技能!你學會了如何利用Python和外部工具,高效地實現(xiàn)PDF、Word、圖片、Markdown之間的各種轉(zhuǎn)換。
除了今天學到的格式轉(zhuǎn)換功能,你還希望Python能幫你實現(xiàn)哪些更復雜的文檔處理需求?比如:自動將Excel數(shù)據(jù)填充到PDF表單?或者實現(xiàn)PDF的批量OCR識別?
以上就是利用Python實現(xiàn)文檔格式互轉(zhuǎn)的操作大全(PDF、Word、圖片、Markdown)的詳細內(nèi)容,更多關(guān)于Python文檔格式互轉(zhuǎn)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python警察與小偷的實現(xiàn)之一客戶端與服務(wù)端通信實例
這篇文章主要介紹了Python警察與小偷的實現(xiàn)之一客戶端與服務(wù)端通信實例,并附有難點及易錯點的分析與說明,需要的朋友可以參考下2014-10-10
利用Python+Opencv實現(xiàn)車牌自動識別完整代碼
這篇文章主要介紹了如何使用Python和OpenCV進行車牌識別,包括圖像預處理、車牌定位、分割和模板匹配等步驟,通過實戰(zhàn)項目,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-04-04
基于python的BP神經(jīng)網(wǎng)絡(luò)及異或?qū)崿F(xiàn)過程解析
這篇文章主要介紹了基于python的BP神經(jīng)網(wǎng)絡(luò)及異或?qū)崿F(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09
淺談python3發(fā)送post請求參數(shù)為空的情況
今天小編就為大家分享一篇淺談python3發(fā)送post請求參數(shù)為空的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Pandas DataFrame 取一行數(shù)據(jù)會得到Series的方法
今天小編就為大家分享一篇Pandas DataFrame 取一行數(shù)據(jù)會得到Series的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
Python使用combinations實現(xiàn)排列組合的方法
今天小編就為大家分享一篇Python使用combinations實現(xiàn)排列組合的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11

