Python實現(xiàn)把PDF文件轉(zhuǎn)換成長圖PNG格式輸出圖片
在日常工作中,我們經(jīng)常會遇到這樣的需求:將一個 PDF 文件轉(zhuǎn)換為一張長圖(PNG 格式),方便在網(wǎng)頁、文檔或社交媒體上展示。比如,將一份報告、合同、教程以圖片的形式分享,而不是附件。本文將手把手教你如何使用 Python 實現(xiàn) PDF → PNG 長圖的轉(zhuǎn)換,并附上完整示例代碼。
一、為什么要把 PDF 轉(zhuǎn)換成長圖
- 方便預覽:很多即時通訊工具或社交平臺不支持 PDF 直接預覽,但圖片可以直接展示。
- 便于分享:將 PDF 轉(zhuǎn)成長圖,用戶無需安裝 PDF 閱讀器,直接在瀏覽器或手機中查看即可。
- 統(tǒng)一排版:長圖在不同平臺上不會因為字體缺失、排版不兼容而錯位。
二、實現(xiàn)思路
要把 PDF 轉(zhuǎn)換成長圖,主要分為兩步:
- 將 PDF 每一頁轉(zhuǎn)為單獨的圖片。
- 將這些圖片縱向拼接成長圖。
Python 中有兩個非常好用的庫:
三、環(huán)境準備
首先,你需要安裝必要的依賴。
1. 安裝 Python 包
pip install pdf2image pillow
2. 安裝 Poppler
pdf2image 底層依賴 Poppler 來解析 PDF。
macOS:
brew install poppler
Ubuntu / Debian:
sudo apt-get install poppler-utils
Windows:
- 下載 Poppler for Windows
- 解壓到本地目錄,例如
C:\poppler-xx\ - 將
C:\poppler-xx\bin添加到系統(tǒng)環(huán)境變量PATH
四、完整代碼示例
下面是一個完整的 Python 程序,可以直接運行:
from pdf2image import convert_from_path
from PIL import Image
def pdf_to_long_png(pdf_path, output_path="output.png", dpi=200):
# 1. 將 PDF 轉(zhuǎn)為圖片列表
pages = convert_from_path(pdf_path, dpi=dpi)
# 獲取寬度和總高度
widths, heights = zip(*(i.size for i in pages))
max_width = max(widths)
total_height = sum(heights)
# 2. 創(chuàng)建一個空白長圖
long_image = Image.new("RGB", (max_width, total_height), "white")
# 3. 拼接每一頁
y_offset = 0
for page in pages:
long_image.paste(page, (0, y_offset))
y_offset += page.height
# 4. 保存為 PNG
long_image.save(output_path, "PNG")
print(f"? 已生成長圖: {output_path}")
if __name__ == "__main__":
pdf_file = "example.pdf" # 輸入 PDF 文件
pdf_to_long_png(pdf_file, "long_image.png")
代碼說明
- convert_from_path(pdf_path, dpi):將 PDF 轉(zhuǎn)換為 PIL 圖片對象列表,
dpi決定分辨率。 - Image.new():創(chuàng)建一個空白畫布(寬度 = 最大頁寬度,高度 = 所有頁高度總和)。
- paste():逐頁粘貼到畫布上,從而拼成長圖。
- save():最終輸出 PNG 文件。
五、運行效果
- 輸入:一個多頁 PDF 文件。
- 輸出:一張
long_image.png,包含 PDF 所有頁面的完整內(nèi)容。
這樣,你就可以在社交平臺、微信公眾號、博客里直接展示一份 PDF 內(nèi)容,而無需上傳 PDF 文件本身。
六、進階優(yōu)化
1.支持命令行參數(shù)
使用 argparse,讓用戶通過命令行輸入 PDF 路徑和輸出文件名。
2.分段長圖
如果 PDF 頁數(shù)太多,長圖可能過大,可以考慮分段拼接成多張圖。
3.背景透明
將 Image.new("RGB", ...) 改成 Image.new("RGBA", ...),可以生成帶透明背景的 PNG。
4.指定頁碼范圍
convert_from_path(pdf_path, first_page=1, last_page=5) 可只轉(zhuǎn)換前 5 頁。
七、總結(jié)
通過 Python 的 pdf2image + Pillow,我們可以輕松實現(xiàn) PDF → PNG 長圖 的轉(zhuǎn)換:
- 適用于合同、簡歷、教程、報告等文件。
- 代碼簡潔,幾行即可實現(xiàn)。
- 可擴展性強,可以根據(jù)需求做更多定制化優(yōu)化。
如果你也有類似需求,不妨嘗試一下這段代碼,把你的 PDF 文件轉(zhuǎn)成長圖吧!
到此這篇關(guān)于Python實現(xiàn)把PDF文件轉(zhuǎn)換成長圖PNG格式輸出圖片的文章就介紹到這了,更多相關(guān)Python PDF轉(zhuǎn)長圖PNG內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用sort()方法對數(shù)組進行排序的操作指南
在開發(fā)過程中,經(jīng)常需要對數(shù)據(jù)進行排序,Python 中的 sort() 方法是用來對列表進行排序的,它是一個非常常用且高效的排序工具,本文將通過一個實際項目的代碼示例,來講解如何使用 sort() 方法對數(shù)組進行排序,需要的朋友可以參考下2025-06-06
python使用標準庫根據(jù)進程名如何獲取進程的pid詳解
Python有一套很有用的標準庫(standard library)。標準庫會隨著Python解釋器,一起安裝在你的電腦中的,所以下面這篇文章主要給大家介紹了關(guān)于python使用標準庫根據(jù)進程名如何獲取進程pid的相關(guān)資料,需要的朋友可以參考下。2017-10-10
python中使用smtplib和email模塊發(fā)送郵件實例
python腳本發(fā)郵件,一般會用到smtplib和email這兩個模塊??纯丛撃K怎么使用,先看smtplib模塊。 smtplib模塊定義了一個簡單的SMTP客戶端,可以用來在互聯(lián)網(wǎng)上發(fā)送郵件2014-04-04
PyTorch快速搭建神經(jīng)網(wǎng)絡及其保存提取方法詳解
本篇文章主要介紹了PyTorch快速搭建神經(jīng)網(wǎng)絡及其保存提取方法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
如何用Python中Tushare包輕松完成股票篩選(詳細流程操作)
這篇文章主要介紹了如何用Python中Tushare包輕松完成股票篩選(詳細流程操作),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
讓Django的BooleanField支持字符串形式的輸入方式
這篇文章主要介紹了讓Django的BooleanField支持字符串形式的輸入方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05

