Python實(shí)現(xiàn)把PDF文件轉(zhuǎn)換成長(zhǎng)圖PNG格式輸出圖片
在日常工作中,我們經(jīng)常會(huì)遇到這樣的需求:將一個(gè) PDF 文件轉(zhuǎn)換為一張長(zhǎng)圖(PNG 格式),方便在網(wǎng)頁(yè)、文檔或社交媒體上展示。比如,將一份報(bào)告、合同、教程以圖片的形式分享,而不是附件。本文將手把手教你如何使用 Python 實(shí)現(xiàn) PDF → PNG 長(zhǎng)圖的轉(zhuǎn)換,并附上完整示例代碼。
一、為什么要把 PDF 轉(zhuǎn)換成長(zhǎng)圖
- 方便預(yù)覽:很多即時(shí)通訊工具或社交平臺(tái)不支持 PDF 直接預(yù)覽,但圖片可以直接展示。
- 便于分享:將 PDF 轉(zhuǎn)成長(zhǎng)圖,用戶無(wú)需安裝 PDF 閱讀器,直接在瀏覽器或手機(jī)中查看即可。
- 統(tǒng)一排版:長(zhǎng)圖在不同平臺(tái)上不會(huì)因?yàn)樽煮w缺失、排版不兼容而錯(cuò)位。
二、實(shí)現(xiàn)思路
要把 PDF 轉(zhuǎn)換成長(zhǎng)圖,主要分為兩步:
- 將 PDF 每一頁(yè)轉(zhuǎn)為單獨(dú)的圖片。
- 將這些圖片縱向拼接成長(zhǎng)圖。
Python 中有兩個(gè)非常好用的庫(kù):
三、環(huán)境準(zhǔn)備
首先,你需要安裝必要的依賴。
1. 安裝 Python 包
pip install pdf2image pillow
2. 安裝 Poppler
pdf2image 底層依賴 Poppler 來(lái)解析 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
四、完整代碼示例
下面是一個(gè)完整的 Python 程序,可以直接運(yùn)行:
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)建一個(gè)空白長(zhǎng)圖
long_image = Image.new("RGB", (max_width, total_height), "white")
# 3. 拼接每一頁(yè)
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"? 已生成長(zhǎng)圖: {output_path}")
if __name__ == "__main__":
pdf_file = "example.pdf" # 輸入 PDF 文件
pdf_to_long_png(pdf_file, "long_image.png")
代碼說(shuō)明
- convert_from_path(pdf_path, dpi):將 PDF 轉(zhuǎn)換為 PIL 圖片對(duì)象列表,
dpi決定分辨率。 - Image.new():創(chuàng)建一個(gè)空白畫(huà)布(寬度 = 最大頁(yè)寬度,高度 = 所有頁(yè)高度總和)。
- paste():逐頁(yè)粘貼到畫(huà)布上,從而拼成長(zhǎng)圖。
- save():最終輸出 PNG 文件。
五、運(yùn)行效果
- 輸入:一個(gè)多頁(yè) PDF 文件。
- 輸出:一張
long_image.png,包含 PDF 所有頁(yè)面的完整內(nèi)容。
這樣,你就可以在社交平臺(tái)、微信公眾號(hào)、博客里直接展示一份 PDF 內(nèi)容,而無(wú)需上傳 PDF 文件本身。
六、進(jìn)階優(yōu)化
1.支持命令行參數(shù)
使用 argparse,讓用戶通過(guò)命令行輸入 PDF 路徑和輸出文件名。
2.分段長(zhǎng)圖
如果 PDF 頁(yè)數(shù)太多,長(zhǎng)圖可能過(guò)大,可以考慮分段拼接成多張圖。
3.背景透明
將 Image.new("RGB", ...) 改成 Image.new("RGBA", ...),可以生成帶透明背景的 PNG。
4.指定頁(yè)碼范圍
convert_from_path(pdf_path, first_page=1, last_page=5) 可只轉(zhuǎn)換前 5 頁(yè)。
七、總結(jié)
通過(guò) Python 的 pdf2image + Pillow,我們可以輕松實(shí)現(xiàn) PDF → PNG 長(zhǎng)圖 的轉(zhuǎn)換:
- 適用于合同、簡(jiǎn)歷、教程、報(bào)告等文件。
- 代碼簡(jiǎn)潔,幾行即可實(shí)現(xiàn)。
- 可擴(kuò)展性強(qiáng),可以根據(jù)需求做更多定制化優(yōu)化。
如果你也有類似需求,不妨嘗試一下這段代碼,把你的 PDF 文件轉(zhuǎn)成長(zhǎng)圖吧!
到此這篇關(guān)于Python實(shí)現(xiàn)把PDF文件轉(zhuǎn)換成長(zhǎng)圖PNG格式輸出圖片的文章就介紹到這了,更多相關(guān)Python PDF轉(zhuǎn)長(zhǎng)圖PNG內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)將PDF轉(zhuǎn)換為PNG圖片的示例代碼
- 使用Python將圖片轉(zhuǎn)換為PDF格式的三種常見(jiàn)方法
- Python借助AI快速開(kāi)發(fā)圖片轉(zhuǎn)PDF的工具
- 使用Python實(shí)現(xiàn)pdf轉(zhuǎn)圖片再進(jìn)行OCR識(shí)別
- python中圖片轉(zhuǎn)換為pdf實(shí)現(xiàn)方法
- Python實(shí)現(xiàn)將圖片批量轉(zhuǎn)為PDF
- 用Python將PDF文件轉(zhuǎn)存為圖片的實(shí)現(xiàn)方法
- 使用Python實(shí)現(xiàn)將PDF轉(zhuǎn)為圖片
相關(guān)文章
在paddle中安裝python-bidi出錯(cuò)問(wèn)題及解決
在Paddle中安裝python-bidi時(shí)遇到Rust和Cargo缺失的問(wèn)題,通過(guò)安裝舊版本的python-bidi(0.4.0)解決了問(wèn)題2025-02-02
Python+numpy實(shí)現(xiàn)一個(gè)蜘蛛紙牌游戲
蜘蛛紙牌大家玩過(guò)沒(méi)有?之前的電腦上自帶的游戲,用他來(lái)摸魚(yú)過(guò)的舉個(gè)手。但是現(xiàn)在的電腦上已經(jīng)沒(méi)有蜘蛛紙牌了。所以本文就來(lái)用Python做一個(gè)吧,需要的可以參考一下2022-12-12
python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù)
這篇文章主要介紹了python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Python快速實(shí)現(xiàn)一鍵摳圖功能的全過(guò)程
你有沒(méi)想過(guò),Python也能成為這樣的一種工具:在只有一張圖片,需要細(xì)致地?fù)赋鋈宋锏那闆r下,能幫你減少摳圖步驟,這篇文章主要給大家介紹了關(guān)于Python快速實(shí)現(xiàn)一鍵摳圖功能的相關(guān)資料,需要的朋友可以參考下2021-06-06
tensorflow實(shí)現(xiàn)測(cè)試時(shí)讀取任意指定的check point的網(wǎng)絡(luò)參數(shù)
今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)測(cè)試時(shí)讀取任意指定的check point的網(wǎng)絡(luò)參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
聊聊Pytorch torch.cat與torch.stack的區(qū)別
這篇文章主要介紹了Pytorch torch.cat與torch.stack的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
python實(shí)現(xiàn)QQ郵箱發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)QQ郵箱發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03

