PDF補丁丁是一個多功能的 PDF 文檔工具箱,在 2009 年開始,我開始了該程序的開發,到現在也已經有十二年了。它致力於解除 PDF 文檔的煩惱,帶有一個強大的 PDF 書簽編輯器(可自動生成書簽),有超快的從 PDF 文檔里無損提取圖片的能力,又可以合並圖片和 PDF 文檔,統一頁面尺寸,清除文檔的打印和復制限制,這些功能都是這些年來一直為用戶所喜愛的。對於高端開發者,又提供了文檔結構探查器等一系列功能。
根據前一篇文章的預告,從今天開始,PDF 補丁丁的源代碼(除第三方組件外)將完全開放,供有心人學習 PDF 文檔處理技術之用。請使用者留意的是本軟件及源代碼采用“良心授權”協議——用戶每次使用本軟件后如有所獲益,應行一善事;如使用源代碼開發了新的軟件並獲得收益,應將收益中不低於千分之一的金額捐贈給社會的弱勢群體。
詳見開放源代碼網站:https://github.com/wmjordan/PDFPatcher
常用的 PDF 開源組件簡介
PDF 文檔的規范(ISO 32000-1:2008 《Document management — Portable document format — Part 1:PDF 1.7》)可從網上找到,一般來說,它是 PDF 處理程序開發者的必讀文獻。
PDF 文檔格式中涉及印刷領域的多項技術,並有其獨特的文檔結構,還使用了多種數據壓縮算法。要從零開始編寫 PDF 文檔的處理程序,對於一般人而言,通常是困難而不太現實的。PDF 補丁丁使用 .NET Framework 開發,主要采用 iText 和 MuPDF 這兩個開放源代碼的組件庫來處理 PDF 文檔。
前者是 .NET 組件,與 PDF 主程序具有較好的互操作性,並且在解析、生成和修改 PDF 文檔,以及嵌入 TTF 字體子集這些功能上,優勝於后者。
后者采用 C 語言開發並編譯,與前者相比,其最大的優點是具有渲染 PDF 文檔為位圖的功能。MuPDF 編譯出來的動態組件庫可在我另一個開放源代碼庫 https://github.com/wmjordan/SharpMuPDF 下載。PDF 補丁丁通過 P/Invoke 技術調用該組件庫的功能。
除了 PDF 開源組件之外,程序還使用了其它優秀開源組件。例如 ObjectListView 這個強大的列表控件、FreeImage 來讀取和解碼各種類型的點陣圖像文件、Cyotek 的 ImageBox 用於顯示渲染好的 PDF 文檔頁面、TabControlExtra 用於構建選項卡式文檔界面、HTMLRenderer 用於顯示 HTML 網頁界面等等。
源代碼的結構
- App 目錄:PDF補丁丁主程序
- Common:一些常用的工具類
- Functions:用於呈現軟件各類功能的窗體和控件
- Lib:程序使用的第三方組件
- Model:編輯文檔時所用的高級模型(基礎數據模型由 iText 和 MuPDF 的類實現)
- Options:程序的選項
- Processor:進行 PDF 文檔處理的算法(其中 Mupdf 目錄里放置了 P/Invoke 調用 MuPDF 的類)
- doc 目錄:放置程序的使用文檔(暫缺)
- JBig2 目錄:放置 JBIG2 圖像的編碼和解碼庫代碼
編譯環境
Windows 10,Visual Studio 2019
工作負載:.NET 桌面開發、C++桌面開發(帶 Windows 10 SDK)