Excel VBA@文檔管理系統

 文檔管理系統

主要為處理公文、會議的Side Project,其中功能包含利用AI工具去辨識紙本公文或PDF公文的文字內容,建立發文字號、發文日期、公文主旨等重要資訊,供使用者進行後續利用。

需要必備的技能或工具

  • Tesseract OCR(***圖片轉文字辨識套件)
  • python
  • Excel VBA
在Excel VBA中使用shell呼叫Python的PDF_OCR.py執行Tesseract OCR辨識指定PDF文檔,產生output.txt後,提供Excel VBA讀取利用,如對於python比較沒有概念的朋友也可以直接使用pyinstaller建立好的PDF_OCR.exe執行辨識動作。

建立流程

1.建立Tesseract的操作環境,請參考Tesseract OCR - 繁體中文【安裝篇】





2.建立Python的可執行環境,請參考網路大神範例,有一拖拉庫

3.建立Python的虛擬開發環境,下載相關套件

pip install pillow pytesseract
pip install PyMuPDF
pip install pyinstaller

4.撰寫Python的腳本檔 (PDF_OCR.py),由衷感謝chatGPT的發展,省很多事去探索。

import sys
import fitz # PyMuPDF
from PIL import Image
import pytesseract
import re # 导入re模块
def extract_text_from_pdf(PDF_PATH, OUTPUT_PATH):
# 创建一个PyMuPDF文档对象
pdf = fitz.open(PDF_PATH)
# 提取PDF页面中的文本
text = ""
for page_num in range(pdf.page_count):
page = pdf[page_num]
text += page.get_text()
# 获取页面的宽度和高度
width = int(page.rect.width)
height = int(page.rect.height)
# 使用Tesseract进行OCR识别
img = Image.frombytes("RGB", [width, height], page.get_pixmap().samples)
text += pytesseract.image_to_string(img, lang='chi_tra')
# 使用正则表达式去除所有空白字符
cleaned_text = re.sub(r'\s', '', text)
paragraphs = text.split('\n')
# 保存分段后的文本
with open(OUTPUT_PATH, 'w', encoding='utf-8') as file:
for paragraph in paragraphs:
# 在每段之间加上换行符
file.write(paragraph + '\n')
print("文本已保存到 {} 文件中。".format(OUTPUT_PATH))
if __name__ == "__main__":
# 检查是否提供了足够的命令行参数
if len(sys.argv) != 3:
print("用法: python script.py PDF_PATH OUTPUT_PATH")
else:
PDF_PATH = sys.argv[1] # 第一个参数是PDF文件路径
OUTPUT_PATH = sys.argv[2] # 第二个参数是输出文件路径
extract_text_from_pdf(PDF_PATH, OUTPUT_PATH)

5.編譯成PDF_OCR資料夾,其中包含PDF_OCR.exe,整包資料夾提供給其他裝置使用,並且其他裝置無須安裝python環境

(非程式開發者從這一步接手就好)

6.拿到整包的資料夾,與文檔管理系統.xls放在同一個位置,其中包含PDF_OCR、Template資料夾,Template中會執行PDF_OCR.exe一些辨識指定PDF與成果Output.txt

7.最終成果


8.檔案連結如下:

留言

Popular Posts

Excel VBA @ 監造日報表、查驗表 -2

ExcelVBA@施工照片整理的應用範例

Excel VBA@ 監造日報表、查驗表