# 安裝依賴(只在缺少套件時才安裝)
import sys
import subprocess
def ensure_pkg(pkg: str, import_name: str | None = None):
try:
__import__(import_name or pkg)
return True
except Exception:
print(f"[install] {pkg}")
subprocess.check_call([sys.executable, '-m', 'pip', 'install', pkg])
return True
ensure_pkg('docx2txt')
# python-docx 的 pip 名稱是 python-docx;import 名稱是 docx
ensure_pkg('python-docx', import_name='docx')
# 用 Pillow 生成「看得見」的示範圖片
ensure_pkg('Pillow', import_name='PIL')
## 1) 在 D:\Temp 生成示範 DOCX(含文字、表格、圖片)
下面這格會:
– 建立輸出資料夾:`D:\Temp\docx2txt_demo`
– 寫入一張可用 PNG
– 用 `python-docx` 建立 `demo.docx`
from pathlib import Path
from docx import Document
from docx.shared import Inches
from PIL import Image, ImageDraw
BASE_DIR = Path(r'D:\Temp') / 'docx2txt_demo'
BASE_DIR.mkdir(parents=True, exist_ok=True)
docx_path = BASE_DIR / 'demo.docx'
img_path = BASE_DIR / 'demo.png'
# 生成一張「看得見」的 PNG(避免 1x1 透明圖在 Word 裡看起來像空白)
img = Image.new('RGB', (500, 220), color=(255, 235, 59)) # 黃底
draw = ImageDraw.Draw(img)
draw.rectangle([20, 20, 480, 200], outline=(33, 33, 33), width=6)
draw.text((40, 85), 'DOCX2TXT DEMO IMAGE', fill=(20, 20, 20))
img.save(img_path)
doc = Document()
doc.add_heading('docx2txt Demo 文件', level=1)
doc.add_paragraph('這是一段普通文字,用來測試 docx2txt 的文字抽取。')
doc.add_paragraph('這段後面會插入圖片:')
doc.add_picture(str(img_path), width=Inches(4.5))
doc.add_paragraph('下面是一個簡單表格:')
table = doc.add_table(rows=2, cols=2)
table.cell(0, 0).text = 'Key'
table.cell(0, 1).text = 'Value'
table.cell(1, 0).text = 'Version'
table.cell(1, 1).text = 'v1'
doc.add_paragraph('結尾段落:完成。')
doc.save(str(docx_path))
print('Written:', docx_path)
print('Image :', img_path)
print('Folder :', BASE_DIR)
demo.docx:

## 2) 用 docx2txt 抽取文字與匯出圖片
`docx2txt.process(input_path, image_dir)`:
– 回傳值:整份文件抽出的 **純文字字串**
– 副作用:若提供 `image_dir`,會把圖片存成檔案(檔名通常像 `image1.png`、`image2.jpeg`)
import docx2txt
images_out_dir = BASE_DIR / 'extracted_images'
images_out_dir.mkdir(parents=True, exist_ok=True)
text = docx2txt.process(str(docx_path), str(images_out_dir))
print('--- Extracted Text ---')
print(text)
print('\n--- Extracted Images ---')
for p in sorted(images_out_dir.glob('*')):
print(p.name, '-', p.stat().st_size, 'bytes')
D:\Temp\docx2txt_demo\extracted_images

## 3) 常見問題與限制(快速版)
– **Q:表格會怎麼輸出?**
– `docx2txt` 會把表格內容「線性化」成文字(格式不一定漂亮),但通常能拿到 cell 文字。
– **Q:能不能知道圖片在第幾段/第幾個 run?**
– `docx2txt` **不提供 mapping**。如果你要「OCR 後插回圖片後面」那種精準定位,建議用 `python-docx` 搭配底層 XML(run / rId)處理。
– **Q:圖片很多張怎麼辦?**
– `docx2txt` 會全部匯出到資料夾;你可以用 `glob(‘*’)` 列出來,再依檔名/順序做後處理。
推薦hahow線上學習python: https://igrape.net/30afN
![Python: 如何使用 os.environ[“PATH”] 設定環境變數?與 sys.path.append() 差別為何? Python: 如何使用 os.environ[“PATH”] 設定環境變數?與 sys.path.append() 差別為何?](https://i0.wp.com/savingking.com.tw/wp-content/uploads/2024/09/20240905135312_0_890fa1.png?quality=90&zoom=2&ssl=1&resize=350%2C233)






![使用 Python 檢驗字符串格式:掌握正則表達式(Regular Expression)的起始^與終止$符號, pattern = r’^GATR[0-9]{4}$’ 使用 Python 檢驗字符串格式:掌握正則表達式(Regular Expression)的起始^與終止$符號, pattern = r’^GATR[0-9]{4}$’](https://i1.wp.com/savingking.com.tw/wp-content/uploads/2024/07/20240712093637_0.png?quality=90&zoom=2&ssl=1&resize=350%2C233)


近期留言