# **相依套件分析報告** 本報告針對 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) 內的敏感資訊或混淆網頁傳入的參數。