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

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

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

具体请见开放源代码网站:https://github.com/wmjordan/PDFPatcher

常用的 PDF 开源组件简介

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

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

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

后者采用 C 语言开发并编译,与前者相比,其最大的优点是具有渲染 PDF 文档为位图的功能。编译出来的动态组件库可在我另一个开放源代码库 https://github.com/wmjordan/SharpMuPDF 下载。PDF 补丁丁通过 P/Invoke 技术调用该组件库的功能。

除了 PDF 开源组件之外,程序还使用了 WinForms 的一些优秀开源组件,以帮助开发。例如 ObjectListView 这个强大的列表控件、FreeImage 来读取和解码各种类型的点阵图像文件、Cyotek 的 ImageBox 用于显示渲染好的 PDF 文档页面、TabControlExtra 用于构建选项卡式文档界面、HTMLRenderer 用于显示 HTML 网页界面等等。

这些组件在源代码网站的 App/Lib 目录中。

源代码的结构

  • App 目录:PDF补丁丁主程序

    • Common:一些常用的工具类
    • Functions:用于呈现软件各类功能的窗体和控件
    • Lib:程序使用的第三方组件
    • Model:编辑文档时所用的高级模型(基础数据模型由 iText 和 MuPDF 的类实现)
    • Options:程序的选项
    • Processor:进行 PDF 文档处理的算法(其中 Mupdf 目录里放置了 P/Invoke 调用 MuPDF 的类)
  • bin 目录:放置程序编译输出的可执行文件
  • doc 目录:放置程序的使用文档(暂缺)
  • JBig2 目录:放置 JBIG2 图像的编码和解码库代码

最新文章

  1. 深度系统deepin使用初体验
  2. 栈,队列的java实现
  3. python基本数据结构-字典-方法
  4. Android项目环境搭建
  5. Qt:禁止qDebug的输出
  6. 老蜗牛写采集:一个漂亮的客户端-几个C#平台下的Winform 皮肤控件
  7. javascript - 工作笔记 (事件三)
  8. 8、手把手教你Extjs5(八)自定义菜单2
  9. R学习笔记 第二篇:矩阵、数组和列表
  10. Spark RDDs vs DataFrames vs SparkSQL
  11. 聊一聊快速排序(Js)
  12. Js/Jquery 关闭 离开或刷新当前页面时提醒,和执行解绑取消提醒
  13. 关注网页的更新状况,了解最新的handsup 消息.
  14. 修改linux镜像
  15. Java调用R语言
  16. JAVAWEB 一一ibatis(框架)
  17. 安卓hid驱动触摸屏
  18. Heroku第三方服务接入指南(二)
  19. 【Android】Sensor框架HAL层解读
  20. 安卓程序代写 网上程序代写[原]BluetoothDevice详解

热门文章

  1. AT695 マス目
  2. 一类利用队列优化的DP
  3. 47-Generate Parentheses
  4. 出现NoClassDefFoundError,始终无法引入jar的解决
  5. java输入代码
  6. Hive(八)【行转列、列转行】
  7. 【二分答案】CF1613 C. Poisoned Dagger
  8. Running shell commands by C++
  9. JVM——内存分配与回收策略
  10. canal安装与使用