【转载】12年历史的 pdf 补丁丁,今天开放源代码了

良心免费软件,甚至有替换PDF内嵌字体的功能~
感谢PDFPatcher作者多年的无私奉献!
以下转载:

PDF补丁丁是一个多功能的 PDF 文档工具箱,在 2009 年开始,我开始了该程序的开发,到现在也已经有十二年了。它致力于解除 PDF 文档的烦恼,带有一个强大的 PDF 书签编辑器(可自动生成书签),有超快的从 PDF 文档里无损提取图片的能力,又可以合并图片和 PDF 文档,统一页面尺寸,清除文档的打印和复制限制,这些功能都是这些年来一直为用户所喜爱的。对于高端开发者,又提供了文档结构探查器等一系列功能。

根据前一篇文章的预告,从今天开始,PDF 补丁丁的源代码(除第三方组件外)将完全开放,供有心人学习 PDF 文档处理技术之用。请使用者留意的是本软件及源代码采用“ 良心授权 ”协议—— 用户每次使用本软件后如有所获益,应行一善事;如使用源代码开发了新的软件并获得收益,应将收益中不低于千分之一的金额捐赠给社会的弱势群体

仓促之间,未来得及删除捐赠二维码,本软件并不再需要用户捐赠,捐款二维码将在日后从软件界面中删除。

具体请见开放源代码网站:GitHub - wmjordan/PDFPatcher: PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等
PDFPatcher-master.zip (16.6 MB)

常用的 PDF 开源组件简介

PDF 文档的规范可从网上找到,一般来说,ISO 32000 是 PDF 文档处理器开发者的必读文献。PDF 文档涉及印刷领域的多项技术,并有其独特的文档结构,还使用了多种数据压缩算法。要从零开始编写 PDF 文档的处理程序,对于一般人而言,通常是困难而不太现实的。

PDF 补丁丁使用 .NET Framework 开发,主要采用 iText 和 MuPDF 这两个开放源代码的组件库来处理 PDF 文档。

前者是 .NET 组件,与 PDF 主程序具有较好的互操作性,并且在解析、生成和修改 PDF 文档,以及嵌入 TTF 字体子集这些功能上,优胜于后者。

后者采用 C 语言开发并编译,与前者相比,其最大的优点是具有渲染 PDF 文档为位图的功能。MuPDF 编译出来的动态组件库可在我另一个开放源代码库 GitHub - wmjordan/SharpMuPDF: A C# library which calls functions from MuPDF(https://github.com/ArtifexSoftware/mupdf) 下载。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 的类)
  • bin 目录:放置程序编译输出的可执行文件
  • doc 目录:放置程序的使用文档(暂缺)
  • JBig2 目录:放置 JBIG2 图像的编码和解码库代码

编译环境

Windows 10,Visual Studio 2019

工作负载:.NET 桌面开发、C++桌面开发(带 Windows 10 SDK)

7 个赞

一直都在用。

1 个赞

作者咋说的这么伤感呢。静等大咖出手,全力支持 :+1: :+1: :+1: :+1: :+1:

PDF补丁丁异常强大!源码虽看不懂,依着小仓鼠的习性,也赶紧下载一份,屯着!

用了好一陣子,確實是不錯的pdf工具。真要挑點兒毛病,得說界面不夠漂亮,而且只有簡體中文。希望有本事的朋友能加以改進,至少出個英語界面的版本,讓更多人能使用。

下载了MuPDF,想解密一个已加密的PDF文档,却发现不会用

谢谢分享!不过下载解压后无可执行文件。

1 个赞

楼主放出来的是源代码。
可执行文件要去MuPDF的网站下载,好像很多功能需要命令行实现,暂时用不来。