跳到主要內容
節省工具箱Jason Tools
專案分享

jt-doc-tools:自架的 PDF 與 Office 文件處理平台

Jason Cheng 瀏覽 1,341 次
jt-doc-tools:自架的 PDF 與 Office 文件處理平台
本文目錄
  1. 為什麼要自架
  2. 41 個工具,六大分類
  3. 幾個我自己最常用的工具
  4. 我的工作區
  5. LLM AI 加值(選用)
  6. 企業管理功能
  7. 安裝
  8. 安全性注意事項
  9. 結論
  10. 參考資料

公司沒有購買 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 編輯器:受 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 引擎,會用到 OxOffice 或 LibreOffice(優先使用 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 預覽驗證
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 轉文書檔:三引擎可選,轉完直接前後對照逐頁比對品質
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 即時推回桌機表格,含統編反查與會計科目判讀
電子發票處理:手機掃 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 並排對照,文件內容不外傳

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

企業管理功能

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

認證與 SSO

同時支援本機帳號、LDAP、Active 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 角色與工具權限逐項設定
權限矩陣: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-admin 與 jtdt-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-local、jtdt 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 轉文書檔就是這樣被使用者推著做出來的。

參考資料

延伸閱讀