Python實現(xiàn)從PPT提取圖片和文本
在日常辦公和數(shù)據(jù)處理中,我們經(jīng)常需要從 PowerPoint 演示文稿中提取素材,比如圖片和文本內(nèi)容。手動復制粘貼不僅效率低,還容易出錯。今天,我就來介紹如何使用 Python 輕松實現(xiàn)從 PPT 中提取圖片和文本。
準備工作
首先,你需要安裝 Spire.Presentation for Python??梢酝ㄟ^ pip 命令進行安裝:
pip install Spire.Presentation
安裝完成后,就可以開始編寫代碼了。
從 PPT 中提取圖片
很多時候,PPT 里的圖片是我們需要的素材。下面的代碼演示了如何批量提取 PPT 中的所有圖片并保存到本地:
from spire.presentation.common import *
from spire.presentation import *
# 創(chuàng)建 Presentation 實例
ppt = Presentation()
# 加載 PowerPoint 文檔
ppt.LoadFromFile("sample.pptx")
# 遍歷文檔中的所有圖片
for i, image in enumerate(ppt.Images):
# 提取并保存圖片
ImageName = "ExtractImage/Images_" + str(i) + ".png"
image.Image.Save(ImageName)
ppt.Dispose()
代碼解析:
- Presentation():創(chuàng)建 PPT 文檔對象
- LoadFromFile():加載需要處理的 PPT 文件
- ppt.Images:獲取文檔中所有圖片的集合
- image.Image.Save():將圖片保存為 PNG 格式
運行后,所有圖片會按順序保存到 ExtractImage 文件夾下,命名為 Images_0.png、Images_1.png 等。
從 PPT 中提取文本
除了圖片,提取文本內(nèi)容也是常見需求。下面的代碼可以遍歷每一張幻燈片,提取所有形狀中的文字:
from spire.presentation import *
from spire.presentation.common import *
# 創(chuàng)建 Presentation 對象
pres = Presentation()
# 加載 PowerPoint 演示文稿
pres.LoadFromFile("Sample.pptx")
text = []
# 遍歷每一張幻燈片
for slide in pres.Slides:
# 遍歷每個形狀
for shape in slide.Shapes:
# 判斷形狀是否為 IAutoShape 類型(可包含文本)
if isinstance(shape, IAutoShape):
# 提取形狀中的文本
for paragraph in shape.TextFrame.Paragraphs:
text.append(paragraph.Text)
# 將提取的文本寫入文件
with open("output/SlideText.txt", "w", encoding='utf-8') as f:
for s in text:
f.write(s + "\n")
pres.Dispose()
代碼解析:
- pres.Slides:獲取所有幻燈片的集合
- slide.Shapes:獲取每張幻燈片中的所有形狀
- IAutoShape:代表可以包含文本的自動形狀類型
- shape.TextFrame.Paragraphs:獲取形狀中的段落集合
- 最終將所有文本寫入 SlideText.txt 文件,每行一個段落
注意事項
資源釋放 :使用完 Presentation 對象后,務必調(diào)用 Dispose() 方法釋放資源,避免內(nèi)存泄漏。
文件路徑 :確保 PPT 文件路徑正確,保存圖片和文本的目錄需要提前創(chuàng)建或使用代碼自動創(chuàng)建。
文本編碼 :寫入文本文件時使用 utf-8 編碼,可以正確處理中文等非英文字符。
圖片格式 :Save() 方法保存的圖片默認為 PNG 格式,如需其他格式可以參考官方文檔。
形狀類型 :文本提取時只處理了 IAutoShape 類型,如果文本位于表格、圖表等其他形狀中,需要額外處理。
方法補充
下面是一個使用 Python 從 PowerPoint(.pptx 文件)中提取所有文本和圖片的完整解決方案。核心依賴是 python-pptx 庫,它能高效解析 Office Open XML 格式的 PPTX 文件。
1.安裝依賴
pip install python-pptx pillow
python-pptx:用于解析 PPTX 文件,提取文本框、表格、形狀中的文本,以及圖片對象。Pillow:用于處理提取出的圖片(保存到文件)。
2.功能實現(xiàn)
以下代碼會:
- 打開 PPTX 文件;
- 遍歷每一張幻燈片;
- 提取所有形狀中的文本(包括標題、正文、表格單元格、文本框等);
- 提取所有圖片,并保存為 PNG 格式到指定文件夾。
import os
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE
from PIL import Image
import io
def extract_text_and_images(pptx_path, output_dir="extracted"):
"""
從 PPTX 文件中提取所有文本和圖片
:param pptx_path: PPTX 文件路徑
:param output_dir: 輸出目錄(文本文件和圖片文件夾)
"""
# 創(chuàng)建輸出目錄
os.makedirs(output_dir, exist_ok=True)
img_dir = os.path.join(output_dir, "images")
os.makedirs(img_dir, exist_ok=True)
# 加載 PPT
prs = Presentation(pptx_path)
# 用于保存所有文本的列表
all_text = []
# 遍歷每一張幻燈片
for slide_idx, slide in enumerate(prs.slides, start=1):
slide_text = []
slide_text.append(f"--- 幻燈片 {slide_idx} ---")
# 遍歷幻燈片中的所有形狀
for shape in slide.shapes:
# --- 提取文本 ---
# 1. 文本框或自選圖形中的文本
if shape.has_text_frame:
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
if run.text.strip():
slide_text.append(run.text)
# 2. 表格中的文本
if shape.has_table:
table = shape.table
for row in table.rows:
row_text = []
for cell in row.cells:
if cell.text.strip():
row_text.append(cell.text.strip())
if row_text:
slide_text.append(" | ".join(row_text))
# 3. 圖表中的文本(簡單提取標題)
if shape.has_chart:
chart = shape.chart
if chart.has_title:
title = chart.chart_title.text_frame.text
if title.strip():
slide_text.append(f"圖表標題: {title}")
# --- 提取圖片 ---
if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
# 獲取圖片的二進制數(shù)據(jù)
image_stream = shape.image.blob
# 生成圖片文件名
img_filename = f"slide_{slide_idx}_img_{shape.shape_id}.png"
img_path = os.path.join(img_dir, img_filename)
# 使用 Pillow 保存圖片
img = Image.open(io.BytesIO(image_stream))
img.save(img_path)
slide_text.append(f"[圖片已保存: {img_path}]")
# 將當前幻燈片的文本加入總文本
all_text.extend(slide_text)
all_text.append("") # 空行分隔
# 保存所有文本到文件
txt_path = os.path.join(output_dir, "extracted_text.txt")
with open(txt_path, "w", encoding="utf-8") as f:
f.write("\n".join(all_text))
print(f"提取完成!")
print(f"文本保存至: {txt_path}")
print(f"圖片保存至: {img_dir}")
# 使用示例
if __name__ == "__main__":
extract_text_and_images("example.pptx", output_dir="my_extraction")3.關鍵點說明
| 功能 | 實現(xiàn)方式 |
|---|---|
| 文本提取 | 檢查 shape.has_text_frame、shape.has_table、shape.has_chart 等屬性,提取其中的文字內(nèi)容。 |
| 圖片提取 | 判斷 shape.shape_type == MSO_SHAPE_TYPE.PICTURE,然后通過 shape.image.blob 獲取原始字節(jié)流,再用 Pillow 保存。 |
| 輸出組織 | 文本按幻燈片順序?qū)懭胍粋€ .txt 文件;圖片單獨保存在 images 子目錄下,文件名包含所在幻燈片索引和形狀 ID。 |
總結(jié)
通過 Spire.Presentation for Python,我們可以用十幾行代碼就完成 PPT 中圖片和文本的批量提取工作。這個庫功能強大且易于使用,非常適合自動化辦公場景。希望這篇文章能幫助你提高工作效率!
如果你有更多關于 PPT 自動化處理的需求,比如創(chuàng)建 PPT、修改內(nèi)容、添加圖表等,Spire.Presentation 還提供了更多豐富的功能等待你去探索。
到此這篇關于Python實現(xiàn)從PPT提取圖片和文本的文章就介紹到這了,更多相關Python提取PPT圖片和文本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python使用PIL模塊實現(xiàn)給圖片打水印的方法
這篇文章主要介紹了python使用PIL模塊實現(xiàn)給圖片打水印的方法,涉及使用PIL模塊操作圖片的相關技巧,需要的朋友可以參考下2015-05-05
Python3訪問并下載網(wǎng)頁內(nèi)容的方法
這篇文章主要介紹了Python3訪問并下載網(wǎng)頁內(nèi)容的方法,實例分析了Python頁面抓取及寫入文件的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07
Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法
今天小編就為大家分享一篇Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12

