相依套件分析報告
本報告針對 ActiveX 元件核心實作檔 CB_IMGPSScanImp.pas 進行功能解構,並分析其與第三方套件的綁定關係,以作為後續維護或現代化升級之參考。
壹、 依功能拆分模組與第三方套件綁定分析
根據原始碼結構,CB_IMGPSScanImp.pas 是一個將介面、硬體、網路與業務邏輯高度耦合的「上帝物件 (God Object)」。若要進行重構或拆件,建議依據以下五個核心模組進行解耦:
1. 硬體掃描控制模組 (Scanner Controller)
- 功能描述:負責與實體掃描機溝通,處理 TWAIN 介面初始化、設定掃描參數(DPI、色彩、雙面)、觸發掃描指令,以及接收掃描完成的記憶體影像 (DibHandle)。
- 子模組細分建議:
- TWAIN 介面封裝 (TWAIN Wrapper):專門負責底層 TWAIN 驅動程式的呼叫、狀態機管理與錯誤處理。
- 掃描參數管理器 (Scanner Profile Manager):負責載入、儲存與套用各類掃描設定 (DPI、對比、亮度、單雙面等)。
- 事件與回呼接收器 (Acquisition Event Handler):專責處理非同步的
OnAcquire 事件,負責將底層 DibHandle 安全地轉換為應用程式可用的影像物件,並通知上層模組。
- 關鍵方法:initkscan、StatrTwainScan、OnAcquire、PageEnd、PageDone。
- 第三方套件綁定 (強綁定):
- 依賴 Envision Imaging SDK (EnScan) 進行 TWAIN 驅動控制。
- 依賴 EnMisc 處理底層記憶體或雜項運算。
2. 影像處理與轉換模組 (Image Processor)
- 功能描述:負責對擷取到的原始影像進行後製處理,包括:裁切(如 A3 裁 A4)、去斜 (Deskew)、旋轉、二值化 (轉黑白)、格式轉換 (轉 TIFF/JPEG),以及讀取影像上的條碼。
- 子模組細分建議:
- 影像幾何變換引擎 (Image Transformation Engine):專責處理去斜 (Deskew)、旋轉、縮放與裁切等座標/空間運算。
- 色彩與格式處理器 (Color & Format Converter):負責二值化、灰階/彩色轉換,以及 TIFF/JPEG 等不同檔案格式的壓縮與編解碼。
- 條碼與標記識別器 (Barcode & Marker Recognizer):獨立負責分析影像中的條碼內容,或進行 OMR (光學標記辨識) 的初步像素比對。
- OMR 與十字定位點分析器 (OMR & Anchor Analyzer):專門為「光學標記辨識 (OMR)」服務,負責找出影像上的基準定位點,並計算特定區域內的黑白像素分佈。
- 關鍵方法:ImageReSize_FormID、CheckNeedCrop、DeskewImg、ConvertToBW。
- 第三方套件綁定 (強綁定):
- 依賴 Envision Imaging SDK (EnTifGr, EnDiGrph) 進行 TIFF (CCITT Group 4) 壓縮與 DIB 物件封裝。
- 依賴 MPS Barcode (mpsBarco, BarcodesFinder) 進行影像條碼掃描與解析。
3. 安全傳輸與 API 通訊模組 (Transport Manager)
- 功能描述:負責將掃描並壓縮後的檔案上傳至伺服器,或從伺服器下載檔案。同時處理與後端 Java Servlet 的參數交換(如校時、取得 FTP 資訊、更新案件狀態)。
- 子模組細分建議:
- HTTP/HTTPS API 請求管理器 (RESTful / Servlet Client Wrapper): 專責透過 HTTP(S) 協定,向後端的 Java Servlet 端點發送 GET/POST 請求。
- 雙協定檔案上傳/下載引擎 (Dual-Protocol File Transfer Engine): 處理實體影像檔案的實體傳輸,並根據系統設定動態切換 HTTP 或 FTP 協定。
- 安全加密與雜湊模組 (Security, Crypto & Hashing Utils): 負責資料傳輸前後的加解密運算,以及檔案完整性的 MD5 校驗,確保通訊過程不被竄改。
- 傳輸前置準備與封裝器 (Payload Archiver & Preparer): 在真正啟動傳輸前,將硬碟上散落的 TIFF/JPG 檔案、
.dat 索引檔打包成單一的 ZIP 封裝檔。
- 關鍵方法:upFile、dnFile_Get、ProcessServlet_Get、GetServerDate、GetftpInfo。
- 第三方套件綁定 (強綁定):
- 依賴 SecureBlackbox (SBSimpleSSL, SBHTTPSClient, SBSimpleFTPS 等) 處理 HTTPS/FTPS 安全加密通訊。
- 依賴 Indy (IdHashMessageDigest) 產生檔案的 MD5 檢核碼。
- 依賴自訂/第三方加密庫 (Encryp) 處理字串加解密。
4. 業務邏輯與資料解析模組 (Business Logic & Parser)
- 功能描述:專案核心的領域邏輯,包含接收網頁端傳入的參數字串進行解析、定義文件歸類邏輯(由條碼推導文件類型)、OMR (光學標記辨識) 檢核定義等。
- 子模組細分建議:
- 系統參數與組態儲存庫 (Config & Parameter Repository):負責解析由 Web 端透過字串傳入的各類系統設定表(如 DOC_INF、FORM_INF 等),並將其儲存於記憶體中供全局查詢。
- 領域實體對映與結構管理器 (Entity Mapping & Structure Manager):將抽象的條碼對映至具體的業務實體,並在檔案系統上維護「案件 -> 文件分份 -> 頁面」的虛擬樹狀結構。
- OMR 與業務規則檢核引擎 (OMR & Business Rule Engine):處理最核心的檢核邏輯,包含主文件/相依互斥文件檢核、欄位級別的 OMR 畫記檢核,以及基於 XML 設定的各種業務規則。
- 案件異動與舊案引用處理器 (Case Modification & Legacy Handler):專責處理「補件」、「重掃」、「引用舊件」等複雜的邊界狀態與跨案件資料流動。
- 關鍵方法:SetSQLData、GetSQLData、FormCode2DocNo、OMRCheckCase。
- 第三方套件綁定 (中度綁定):
- 依賴 Xmltool 解析 XML 格式的 OMR 座標定義。
- 依賴 VCLZip (VCLZip, VCLUnZip) 將多個影像檔打包成 ZIP 進行單一傳輸。
5. UI 與介面呈現模組 (UI View)
- 功能描述:負責 ActiveX 控制項的視覺化介面,包含左側的樹狀文件清單 (TreeView)、右側的影像預覽區 (ScrollBox),以及按鈕與多國語言切換。
- 子模組細分建議:
- 案件樹狀檢視元件 (TreeView UI): 獨立管理左側的案件與文件節點,負責節點的建立、刪除與圖示切換。
- 多影像滾動視窗 (ScrollBox View): 管理右側大圖及縮圖的並排顯示,支援拖拉、選取以及快捷鍵操作。
- 多國語系引擎 (I18N Manager): 統一從設定檔中載入字串,替換畫面上所有的 Label、Button 與 Message 提示。
- 核心版面與容器管理 (Layout & Container Management): 定義整個 ActiveX 控制項的視覺區塊,並透過階層式的 Panel 進行排版管理。
- 系統狀態與進度回饋 (Status & Progress Feedback): 在進行耗時的任務時,鎖定 UI 並給予使用者明確的等待提示。
- 關鍵方法:InitialLanguage、各類 OnClick 事件。
- 第三方套件綁定 (輕度綁定):
- 依賴 Envision Imaging (EnImgScr) 作為支援大影像拖曳的滾動視窗。
- 依賴 PJMenuSpeedButtons 作為自訂外觀的按鈕元件。
貳、 第三方套件功能總覽
為達成上述複雜的業務需求,本專案引入了多個 Delphi 著名的第三方套件。以下為各套件的大致功能說明:
1. Envision Imaging SDK (前綴 En)
這是一套專為 Delphi 設計的高效能影像與 TWAIN 處理套件,在金融與保險業的文件電子化系統中非常常見。
- EnScan:封裝了 TWAIN 協定,讓程式能直接控制實體掃描機,控制進紙、解析度與雙面掃描。
- EnDiGrph (TDibGraphic):封裝 Windows 底層的 DIB (Device Independent Bitmap) 記憶體句柄,讓開發者能像操作一般圖片一樣操作掃描出來的原始資料。
- EnTifGr:專門處理 TIFF 影像格式。銀行業愛用 TIFF 是因為它支援「多頁」且黑白壓縮率極高 (Group 4 Fax Compression)。
- EnImgScr:提供 TImageScrollBox 視覺元件,用來平滑顯示並縮放超大尺寸的掃描圖檔。
- EnMisc:提供影像處理所需的底層輔助數學或資料轉換函式。
2. SecureBlackbox (前綴 SB)
由 EldoS (後被 /n software 收購) 開發的強大安全通訊與加密套件。由於早期 Delphi (D7~D2007) 內建網路庫缺乏完善的 SSL/TLS 支援,此套件被廣泛用於補強安全性。
- SBHTTPSClient / SBSimpleSSL:實作了完整的 HTTPS 用戶端通訊協定,用來安全地上傳檔案或呼叫 Servlet API。
- SBSimpleFTPS:支援 FTP over SSL (FTPS) 的安全檔案傳輸。
- SBWinCertStorage / SBX509:處理 Windows 系統內的憑證儲存區,以及 X.509 數位憑證的驗證(例如確認銀行伺服器的 HTTPS 憑證是否合法)。
3. MPS Barcode & BarcodesFinder
- 功能:這是一套條碼識別引擎。
- 專案應用:在掃描過程中(如 PageDone 或 OnAcquire 階段),它會掃描圖片特定區域尋找一維或二維條碼。讀取到的條碼值會被用來決定這張影像屬於哪一種「文件表單」(FormCode),進而實現自動分類歸檔。
4. VCLZip (VCLZip, VCLUnZip)
- 功能:老牌的 Delphi ZIP 壓縮元件。
- 專案應用:為了節省網路頻寬與減少伺服器連線次數,掃描完成的多張 TIFF/JPG 檔案會被打包成一個 .zip 檔後,再一次性上傳至伺服器。
5. Indy Components (前綴 Id)
- IdHashMessageDigest / idHash:Delphi 內建的 Internet Direct (Indy) 函式庫。
- 專案應用:在此專案中被用來計算檔案或字串的 MD5 Hash (雜湊值)。通常用於確保檔案上傳過程沒有損壞,伺服器比對 MD5 一致才算上傳成功。
6. 其他工具 (Tools & Utils)
- Xmltool:負責讀寫 XML 檔案。銀行經常將表單的 OMR (光學標記辨識) 檢核座標或參數寫成 XML 設定檔,透過此工具讀入系統。
- Encryp:這可能是開發商自訂或第三方的輕量級加密單元,用來加密本機設定檔 (.ini) 內的敏感資訊或混淆網頁傳入的參數。