使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

前言 pdf是最流行的版式格式文件标准,已成为国际标准。pdf相关的开源软件非常多,也基本能满足日常需要了。相关商业软件更是林林总总,几乎应有尽有!似乎没必要自己再独立自主开发!但,本人基于以下考虑,决定自主研发一款pdf阅读器。

  1)通过编写pdf阅读器,可以迅速的熟悉pdf文件的处理。pdf格式包含的内容非常多,仅仅通过查资料,很难掌握其内容。

  2)任何技术,只有自主可控,才能到达气定神闲!使用开源软件是简单,万一遇到问题,就是个坑!

  3)解决pdf与ofd互转问题。ofd是国家标准,相关的处理软件非常少。为了解决两种格式文件互转,必须了解pdf。

  4)本人此前开发了一款ofd阅读器,积累了一些经验。为开发pdf阅读器增添了信心。

特别说明 本人花了几周写了这款阅读器,验证了pdf不同类型的数据处理,还远远到不了商用的要求。不积跬步无以至千里!本人会慢慢完善这款软件,敬请期待。本人的参考资料有两本英文书籍和pdf英文标准文档。

程序界面: 点击下载程序

使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

pdf相关参考资料:

使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

pdf文件结构简介 

pdf总的内容结构如下:

使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

 1)header: 有关pdf版本信息。最新版为 %PDF−1. 7

 2)Body:存储具体数据,pdf就是由很多object组成的。每个object由dictionary和stream组成。dictionary存储就是key、value字符对。dictionary是可以嵌套的,就是value有可能也是一个dictionary。

 3)Cross-Reference Table:交叉索引表。可以快速定位到具体object。便于随机读取object。

 4)Trailer:给出交叉索引表的位置。读取pdf文件都是从最后开始读的,所以Trailer一定是在文件最后。

 pdf处理总体结构

使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

 object内容读取

  交叉索引表能快速定位到某个object的位置,读取object内容不难,关键是分析dictionary。dictionary是可以嵌套,就是dictionary的内容还有dictionary。快速解析出所有的dictionary是处理的关键。典型的dictionary结构如下:

<< /Annots 68 0 R /BleedBox [0 0 504 661.5] /Contents [51 0 R] /CropBox [0 0 504 661.5] /MediaBox [0 0 504 661.5] /Parent 4334 0 R /Resources << //嵌套dictionary /ColorSpace <</CS1 62 0 R>> //2次嵌套dictionary /Font <</F1 7 0 R/F2 11 0 R/F3 13 0 R/F4 53 0 R>> //2次嵌套dictionary /ProcSet [/PDF/Text/ImageB/ImageC] //数组 /XObject <</I1 54 0 R/I2 56 0 R/I3 60 0 R>>//2次嵌套dictionary >> /Type /Page >>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjss.html