2026年7月30日 星期四

[專案分享] jt-doc-tools:自架的 PDF 與 Office 文件處理平台

 


公司沒有購買 Adobe Acrobat,難道員工就只能把合約、廠商表單、員工資料丟到「免費的線上 PDF 工具」,或是下載來源與背景不明的免費軟體來處理嗎?

那些網站確實方便,點兩下就好了,但有幾件事不能不問:你的檔案到底在對方伺服器上留多久?隱私政策會不會允許二次利用或是拿去做 AI 訓練?個資法、GDPR 真的出事的時候誰負責?

所以我把自己這幾年常用的 PDF 與 Office 處理工具,整理成一套可以裝在自己機房、完全開源的整合平台:jt-doc-tools(Jason Tools 文件工具箱),採 Apache 2.0 授權釋出。

目前版本為 v1.14.5,內含 41 個工具。原本只是為了解決自己的使用情境而做,後來有不少客戶接用在公司環境裡,能幫他們處理文件又減少外洩情境,我覺得相當開心。










為什麼要自架


線上 PDF 工具的核心問題只有一件事:你的檔案上傳到別人的伺服器了。合約、人事、財務、客戶名單、身分證、銀行帳號,這些東西一旦離開自己的網路,後面發生什麼事就不是你能控制的了。

我整理了幾個實際會踩到的隱憂:

  • 無法確認何時真的被刪除
    檔案上傳到第三方伺服器,保留多久、備份留幾份,使用者無從查證
     
  • 伺服器端如何處理不透明
    多數線上工具沒有公開原始碼,處理流程是個黑盒子
     
  • 隱私政策會變更
    免費版常見「得將使用者內容用於服務改善或模型訓練」這類條款
     
  • 個資法與 GDPR 風險
    上傳身分證、銀行帳號、客戶名單,等於把個資交給境外服務
     
  • 合規無法追溯
    公司稽核看不到、SIEM 收不到,事後要追查也沒有記錄可查
     
  • 資料跨境疑慮
    跨國、跨機房的傳輸會觸發資料跨境的合規問題
     

地端自架加上開源,才能把這些問題一次處理掉:所有檔案處理只發生在你自己的伺服器上,沒有雲端、沒有第三方 API、沒有 telemetry,原始碼完全公開可以逐行稽核。








41 個工具,六大分類


每個工具都是獨立頁面,左側 sidebar 一鍵切換。以下依分類整理:

填單用印


  • 表單自動填寫
    上傳廠商表單或申請書,自動辨識欄位並填入公司基本資料,一份 profile 對應一家公司,多公司可切換
     
  • 用印與簽名
    拖曳定位印章、簽名、Logo 到 PDF 上,所見即所得,支援批次處理與資產管理
     
  • 浮水印
    透明度、角度、尺寸可調,可平鋪填滿或定位到指定位置,直接寫進頁面 content stream,下游收到也不容易移除
     


用印與簽名:拖曳定位印章並即時預覽


檔案編輯


  • PDF 編輯器
    疊加文字、圖片、形狀、白底遮罩、標註,也可以直接刪除原 PDF 上的文字與圖片
     
  • PDF 壓縮
    三段預設,或進階自訂 DPI 與字型子集化
     
  • 多頁合併(N-up)
    2、4、6、8、9、16 頁合併到一張
     
  • 檔案合併與頁面分拆
    基本的 PDF 操作
     
  • 頁面轉向、頁面整理、頁碼
    排版與編排調整
     
  • 註解平面化
    把註解燒進頁面內容,收件方無法移除,表單欄位仍保留可填
     
  • 掃描拼合
    證件正反面等多張掃描檔,自動抓出有內容的區塊、保留原彩色,依原位置合成到同一張 A4 白底,淡灰底會自動淨白
     


PDF 編輯器:受 Scribus 啟發的 frame-based 疊加模式

這裡先說明定位:PDF 編輯器走的是輕量、夠用就好的路線,不是 Acrobat 等級的完整編輯器。原 PDF 當背景,上面疊加內容,應付日常蓋章、補字、塗銷、加註綽綽有餘;複雜的版面重排、跨頁文字自動斷行重排不在範圍內。


內容處理


  • 擷取文字
    輸出 TXT、Markdown、Word、ODT,可選用 LLM 重排段落
     
  • 擷取圖片
    嵌入圖片自動去重,可勾選下載 ZIP
     
  • PDF 附件萃取
    取出 PDF 內嵌的 EmbeddedFiles
     
  • 字數統計
    總字、字元、段落、句子,附四張互動圖表,可匯出 CSV、JSON、Markdown
     
  • 註解整理
    擷取 PDF 註解輸出完整清單、審閱報告或待辦清單,可依類型與作者篩選
     
  • 逐句翻譯
    接地端 LLM 逐句翻譯,左原文右譯文並排對照
     
  • OCR 文字辨識
    掃描 PDF 或圖片變成可選取的文字,雙引擎(EasyOCR 預設、Tesseract 備援)
     
  • 清單處理
    一行一筆做排序、去重、篩選、取頭尾、大小寫轉換,可組合多個操作
     
  • 電子發票處理
    掃台灣電子發票 QR Code,自動建檔與分類會計科目
     
  • 乘車證明整理
    台鐵、高鐵乘車證明 PDF 自動整理成報帳表格
     
  • 統編查詢
    8 位統編反查,或以公司、機關、學校名稱與地址模糊搜尋,支援批次查詢
     
  • 送件前檢核
    自動檢核頁面尺寸、字型嵌入、欄位完整、敏感資料殘留與隱藏內容
     


格式轉換


  • 文書轉 PDF
    Word、Excel、PowerPoint、ODF 批次轉 PDF
     
  • 文書轉圖片
    每頁轉成 PNG,五段 DPI 可選,從 100 草稿到 400 印刷
     
  • 圖片轉 PDF
    拖入多張圖片,逐頁排序、旋轉、刪除,輸出單一 PDF
     
  • PDF 轉 Markdown
    轉成結構化 Markdown,保留標題、表格、粗體,適合餵 LLM 或做 RAG 預處理
     
  • Markdown 轉文書
    套用主題後輸出 PDF、DOCX、ODT
     
  • PDF 轉文書檔(Beta)
    PDF 反轉成 Word 或 OpenDocument,三種引擎可選
     
  • PDF 轉簡報檔
    PDF 反轉成 PPTX 或 ODP,一頁對一張投影片,投影片尺寸沿用原稿
     

需要注意的是,處理 Word、Excel、PowerPoint、ODF 的工具需要 Office 引擎,會用到 OxOfficeLibreOffice(優先使用 OxOffice,這是 OSSII 維護的台灣本地化 fork,CJK 支援較好),介面上會以扳手圖示標示。其餘 28 個工具只處理 PDF、純文字與圖片,不需要 Office 引擎。安裝腳本會自動偵測並補裝。


資安處理


  • 文件去識別化
    偵測身分證、手機、Email、統編、信用卡、銀行帳號、公司名稱、人名等個資,可選擇編修或遮罩
     
  • 文字去識別化
    純文字版本,額外偵測 IP、hostname、AD DN、API token 等 IT 資料,log 送 AI 前先清乾淨
     
  • PDF 密碼保護與解除
    AES-256 加密與權限控制,也支援批次解除密碼
     
  • 中繼資料清除
    作者、標題、XMP、修訂歷史一鍵清空
     
  • 隱藏內容掃描
    JavaScript、嵌入檔、隱藏文字、外部連結等風險,一鍵清除
     
  • 文件差異比對
    兩份文件並排比對,Office 檔案會自動先轉 PDF
     
  • 文字差異比對
    直接貼兩塊文字立即比對,不用上傳,適合 log、code、改稿快速 diff
     
  • 註解清除
    刪除 PDF 註解,可全部刪除或依作者、類型篩選
     


文件去識別化:偵測完成後可逐筆勾選並即時預覽編修結果

去識別化有兩種處理方式,差異務必分清楚:編修(Redaction)是真正從 PDF 內容流移除,不可還原;資料遮罩(Masking)則是保留版面格式但內容遮蔽,方便產出對外文件。








幾個我自己最常用的工具


41 個工具講完會太長,這裡挑幾個開發動機比較明確、實際使用頻率也最高的來說。

OCR 文字辨識


常常收到 PDF 掃描檔但想複製裡面的文字怎麼辦?我用 macOS 內建的預覽程式是有支援這個功能,但其他平台就沒那麼方便了。

所以順手把 OCR 加了進來,讓本質是圖片的 PDF 裡面的文字變成可以選取、可搜尋:

  • 純本地識別
    檔案不須經過別人的主機
     
  • 支援多種語言
    雙引擎架構,中日韓辨識準確度高,頁內可直接預覽拖選驗證
     
  • 可搭配本地 LLM Server 加強
    校正常見 OCR 錯字,提升準確率
     
  • 支援外部 GPU 識別伺服器
    每頁從 CPU 的 8 到 15 秒,降到 GPU 的 0.3 到 0.8 秒,快 10 倍以上;連不上會自動退回本機
     


OCR 文字辨識:掃描 PDF 變可選取文字,頁內直接以 PDF.js 預覽驗證


PDF 轉文書檔(Beta)


這是使用者提出最多次的需求:「可不可以加入 PDF 轉可編輯的 DOCX 檔?」

其實我自己沒有這種需求,內建的輕量 PDF 編輯器已經解決我大部份的應用,但既然這麼多人問,還是把它生出來了。目前提供三種轉檔引擎:

  • pdf2docx
    老牌引擎,開發公司 Artifex 已經停止開放原始碼版的維護,但效果還是相當不錯,跨平台相容性高、速度也快
     
  • jtdt-reform
    我自己開發的引擎,依 PDF 實際版面座標用幾何規則重組成可流動、可編輯的內文。大部份情況下 pdf2docx 比較強,但遇到一些特殊格式的 PDF 時反而是這支比較好
     
  • jtdt-layout
    以極盡還原 1:1 排版為目標,把每頁內容依原始座標放進頁面錨定的文字方塊,位置、圖片、框線幾乎 1:1 保留,字型也儘量自動挑選同類替代。表單、多欄、含框線表格最接近原 PDF
     

選用 pdf2docx 時,可以加選我開發的 jtdt-refine 強化轉換效果。輸出格式支援 .odt(LibreOffice / OxOffice)與 .docx(Microsoft Word)兩種。

轉檔完成後會自動產出前 6 頁的轉檔前後對照預覽圖,方便判斷這份檔案適用哪一種引擎。


PDF 轉文書檔:三引擎可選,轉完直接前後對照逐頁比對品質

注意兩個轉檔路徑的差異:pdf2docx 是直出 .docx,若選 .odt 會自動再轉一次;jtdt-reform 是直出 .odt,若選 .docx 也會自動再轉。另外要提醒的是,jtdt-layout 換得的 1:1 版面,代價是採用較多文字方塊來滿足位置還原能力,本質是浮動文字方塊而非流動式文字段落。

另外有不少人也需要簡報,所以後來追加了 PDF 轉簡報檔,可以轉出 .odp 或 .pptx。


電子發票處理


身為校長兼撞鐘的創業者,每期營業稅申報前登打紙本發票都是痛苦,直到有一天終於受不了了,忽然驚覺:我不是正在搞 jt-doc-tools 嗎?乾脆在裡面做個工具快速處理電子發票不就好了?

於是就有了這個工具:

  • 手機連續掃描
    手機登入開啟連續掃描,或是電腦加裝 webcam 本機掃也可以
     
  • 自動識別建檔
    自動對應公司名稱、自動對應會計科目
     
  • 即時同步
    電腦端瀏覽器登入同一帳號,可即時看到掃描結果
     
  • 可搭配本地 LLM Server
    做會計科目更精確的判讀
     
  • 多種匯出格式
    純文字、文件、試算表皆可,共 7 種格式,欄位標題可自訂以對應公司會計系統的匯入欄位
     
  • 自動檢查
    可啟用買方統編檢查與發票期別檢查,不符者自動標示紅色提醒
     

配對方式也很單純:桌機按「手機掃描」會跳出一張一次性配對 QR Code,手機掃過後就在手機瀏覽器開啟鏡頭,掃到的發票自動同步回桌機。不用插線、不用 USB、不用裝 App,同一個 LAN 就能用。


電子發票處理:手機掃 QR Code 即時推回桌機表格,含統編反查與會計科目判讀


乘車證明與高鐵模式


又到準備差旅報銷的時期,常搭高鐵的朋友都知道(唔,其實我是搭台鐵),電子乘車證明的 PDF 檔有密碼,每次下載完都要在那邊對密碼、輸入解開,如果車票一多會瘋掉。

剛好批次 PDF 解除密碼的功能已經做好了,就順便加入「高鐵模式」:只要把一批乘車證明電子檔拉進去,它就會自動解除密碼,並將檔名重新命名為乘車日期。

解完之後再交給 乘車證明整理,自動把日期、交通工具、來源與目的、費用整理成表格,欄位可自訂,最後匯出報帳用的檔案。








我的工作區


工具多了以後就會遇到一個問題:同一份檔案要在工具之間來回下載再上傳。所以後來加了「我的工作區」,把跨工具的暫存檔案留在伺服器上。

  • 存至工作區
    各工具輸出的 PDF 或 PNG 一鍵保留在伺服器,綁帳號隔離,只有自己看得到
     
  • 從工作區載入
    任何工具的上傳區一鍵取回,可以跨工具接力,例如 OCR 後蓋章、再去識別化
     
  • 管理員控管
    可開關整個功能(停用即完全隱藏),統一設定每人容量額度、單檔上限與保留時數
     

認證關閉的單機模式下,工作區為單機共用。








LLM AI 加值(選用)


有 11 個工具支援接自己的 LLM,接上之後可以開啟智慧選項。這裡務必先講清楚:核心工具完全不依賴 LLM,預設關閉,沒設定也照樣 100% 可用

支援任何 OpenAI 相容的後端,本機 Ollama、vLLM、LM Studio、jan.ai、DGX Spark 都可以。以下是幾個實際有感的應用:

  • 逐句翻譯
    分句送 LLM 翻譯並排對照,內建台灣繁體 IT 用詞表,可選填文件領域 hint(法律、醫療、技術)讓專業用詞更準,並行翻譯讓批次處理快 4 到 8 倍
     
  • 擷取文字的段落重排
    把被 PDF 版面切散的句子重新接回自然段落
     
  • 表單自動填寫的校驗
    填完後用視覺模型 review 每個欄位的渲染結果,偵測欄位錯位、截斷、checkbox 沒勾對。30 欄的廠商表不用逐欄人工校對,只看 LLM flag 的那幾欄
     
  • 去識別化補偵測
    regex 抓固定格式,LLM 額外抓「客戶代號 A-2024-0815」「主管 王經理」這類與上下文相關的案例
     
  • OCR typo 校正
    比對前後文校正常見錯字。內建幻覺防護,僅在前後 word count 完全相同時才套用,避免 LLM 自由發揮改字
     
  • 送件前檢核的語意與視覺驗收
    檢查必填欄是否真有填、敘述是否前後矛盾,並用視覺模型檢查蓋章是否壓字、頁面排版是否破損
     
  • 電子發票會計科目判讀
    依賣方統編、公司名與行業批次判定會計科目,內建規則先過,LLM 補規則漏抓的
     


逐句翻譯:接地端 LLM 並排對照,文件內容不外傳

LLM 功能在 /admin/llm-settings 啟用,內建 SSRF 防護(URL allowlist 加上雲端 metadata host blocklist),內網 LAN IP 允許,但雲端 metadata IP 會被拒。








企業管理功能


啟用認證之後,企業環境必備的管理能力一次到位,而且全部開源,沒有付費版差異。

認證與 SSO


同時支援本機帳號LDAPActive Directory。同名帳號可以分屬不同領域並存,例如 jason@local(救援用)加上 jason@ldap(日常登入),各自獨立的角色與權限,登入時從下拉選擇來源。

另支援 SSO 單一登入(OIDC 與 SAML),可以接 Microsoft 365 / Entra ID、Google Workspace、Keycloak、Okta、Authentik 等,首次登入自動建帳號、IdP 群組對應角色,並支援單一登出(SLO)。

還有 Reverse Proxy SSO(Kerberos / SPNEGO):已加入 AD 網域、已登入 Windows 的使用者,經前端 nginx 驗證後自動登入,免再輸入帳密;非網域電腦仍會回到登入頁用其他方式登入。以「信任的反向代理 IP 加上標頭覆寫」防偽造。


權限矩陣:RBAC 角色與工具權限逐項設定


角色與權限矩陣


7 個內建角色:管理員、稽核員、一般使用者、文管、財務、業務、法務資安。可以自訂新角色,並把工具使用權限指派到使用者、群組或 OU。權限查詢走 in-memory cache,不影響效能。


稽核記錄與記錄轉送


登入、登出、失敗鎖定、權限變更、設定變更,以及工具呼叫含上傳檔名,全部記下來。以 async 方式寫入 SQLite(WAL 模式)不影響服務效能,可篩選與匯出 CSV,預設保留 90 天自動清理。

記錄轉送支援三種格式:syslog(RFC 5424 UDP/TCP)、CEF(ArcSight)、GELF(Graylog),可多目的地並行,失敗會 retry 3 次後降級為本地稽核事件。要接 Splunk、Graylog、ArcSight 或其他 SIEM 都可以。


職責分離與強制 2FA


啟用認證後,系統會自動建立兩個內建帳號 jtdt-adminjtdt-auditor,分屬不同角色。這個設計的用意是把「管系統的人」與「看記錄的人」完全分開,符合 ISO 27001 等合規規範的職責分離(separation of duties)要求。

  • admin 不能看使用者隱私頁面
    上傳記錄、表單填寫、用印簽名、浮水印歷史這四頁,admin 看不到,只有稽核員能唯讀檢視
     
  • 稽核員不能動系統設定
    使用者、角色、認證、字型、API token 都改不了,也不能使用任何工具
     
  • 稽核員強制 TOTP 2FA
    第一次登入會被導向自動 setup 流程,稽核員自己不能停用,admin 也無法替稽核員取消強制
     
  • 稽核員自身行為也留痕
    每次檢視會寫一筆 auditor_view 事件,admin 看得到稽核員看了什麼,但稽核員自己刪不掉
     
  • 兩個帳號都不能被刪除
    受 is_admin_seed 與 is_audit_seed 保護,權限矩陣裡也鎖住不能改
     

除了內建的 jtdt-auditor,管理員也可以用 sudo jtdt audit-user create <name> 增加任意數量的稽核員,適合大公司 IT、法務、內稽分權審視,每個稽核員各自獨立 2FA。另外,2FA 不只限稽核員,任何使用者(包含 LDAP / AD 帳號)都可以在「我的帳號」自助啟用。

若遇到忘記密碼或 LDAP 設錯導致無法登入,可以用 CLI 離線復原:jtdt auth show / disable / set-localjtdt reset-password <user>,不需重灌也不會掉資料。








安裝


三個平台都是一行指令安裝,需要系統管理員權限。安裝過程會自動偵測並補裝 OxOffice 或 LibreOffice、下載獨立的 Python 環境、註冊系統服務並設定開機自動啟動。

Linux 與 macOS


curl -fsSL https://raw.githubusercontent.com/jasoncheng7115/jt-doc-tools/main/install.sh | sudo bash


Windows 10 / 11


建議到 GitHub Releases 下載 jt-doc-tools-x.y.z-setup.exe 點兩下安裝,不必開 PowerShell 貼指令。安裝精靈為繁體中文,並含解除安裝功能。Windows 版的程式碼簽章由 SignPath.io 提供。

安裝完成後,瀏覽器開啟 http://127.0.0.1:8765/ 即可使用。安裝時間約 5 到 15 分鐘,PyTorch 的 700 MB 是大頭,實際時間依網速而定。


系統需求


  • 作業系統
    Ubuntu 20.04 以上、Debian 11 以上、macOS 12 以上、Windows 10 1809 以上
     
  • 磁碟
    最低 12 GB,建議 20 GB 以上。OS 基底約 2 GB,安裝峰值約 8 GB,完成後常駐約 3 GB
     
  • 記憶體
    最低 2 GB 可用,建議 4 GB 以上
     
  • 架構
    x86_64 或 arm64,Apple Silicon 與 Windows 11 ARM 都支援
     
  • Python
    不需預裝,uv 會自動下載獨立的 3.12
     


升級與移除


# Linux / macOS
sudo jtdt update
sudo jtdt uninstall

# Windows(以系統管理員身分執行 PowerShell)
jtdt update
jtdt uninstall

移除時加上 --purge 會連同資料一起刪除。


兩種部署模式


  • 單機模式(個人用)
    安裝完直接用,預設不啟用認證,適合一人的桌面工作流
     
  • 伺服器模式(團隊或企業)
    部署到 Linux server,到「認證設定」啟用本機帳號、LDAP 或 AD,搭配角色與權限矩陣、稽核與記錄轉送,供內網多人共用並可控管
     








安全性注意事項


這部分請務必看完再部署。

請勿直接對公開網際網路開放


同仁多半會用它處理公司內部或機密文件,包含合約、報價、個資、統編資料等,直接對外開放等於把這些文件與後台一併暴露,有資料外洩風險。

另外本工具會解析上傳的 PDF、Office 與圖片,底層是 MuPDF、LibreOffice、Pillow 這類記憶體不安全的原生程式,屬於高風險攻擊面。

首選是只在內網或 VPN 使用。若因業務必須對外,屬於風險自負,至少要做到反向代理加 HTTPS、認證、強制 2FA、WAF 或速率限制,並持續更新相依套件。


非本機存取一律走反向代理加 HTTPS


只要不是「本機單人」使用,任何網路存取、多人共用、內網其他電腦或對外,一律放在 nginx(或 Caddy)反向代理加 HTTPS 後面,絕不要把 :8765 直接對網路開放

應用程式預設只綁 127.0.0.1:8765,是純 HTTP 沒有 TLS,直接對外等於明文傳輸帳號密碼與文件內容。反向代理負責 TLS 終結、HSTS、憑證、隱藏版本與安全標頭。

如果內網環境受信任、暫時要直接對內網開放,可以用 jtdt bind 0.0.0.0 修改 systemd / launchd / Windows Service 設定並重啟,要綁特定 port 則是 jtdt bind 0.0.0.0:9999。完整的反向代理範例(nginx、Caddy、Apache、HAProxy、Traefik、IIS ARR、F5 BIG-IP)在專案的 OPS.md 裡,三個常見地雷也都標註出來了。


輸出結果僅供輔助參考


表單自動填寫、去識別化、OCR、LLM 校對這些功能的輸出,最終正確性仍須由使用者確認。對重要文件請務必對照原檔複核。

另外在安全性實作上,OWASP Top 10(2025)全 10 項都有對應的自動化測試,細節記在 SECURITY.md;密碼採 scrypt、支援 TOTP 2FA 與職責分離,並以 GitHub Dependabot 加 CodeQL 每週自動掃 CVE 與做 SAST。








結論


jt-doc-tools 最初只是為了解決我自己的使用情境:報帳要登打發票、乘車證明要一張張解密碼、掃描檔想複製文字、廠商表單每次都要重填一遍。做著做著就變成 41 個工具的整合平台了。

但核心的重點只有一個:所有檔案處理只發生在你自己的伺服器上,原始碼完全公開。Apache 2.0 授權,沒有任何雲端、沒有第三方 API、沒有 telemetry。每一行程式碼,你、客戶、內稽或第三方資安顧問都能逐行檢視,沒有混淆過的 binary,也沒有閉源元件。

可以單機模式安裝在個人電腦或內部主機上自己使用,也可以伺服器模式部署在公司內網提供團隊多人使用,同一份程式碼,兩種用法。

如果你也有類似的煩惱,或是公司剛好沒有預算買商用 PDF 軟體但又不想讓文件流出去,歡迎試用。有問題或需求也歡迎到專案回報,前面提到的 PDF 轉文書檔就是這樣被使用者推著做出來的。








參考資料