设为首页收藏本站

CSharp学习论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 画图 EXCEL
查看: 4748|回复: 2

[C/S] c#实现基于PDF交叉引用表的PDF文件信息嵌入和提取方法源码下载

[复制链接]
发表于 2013-5-26 16:03:06 | 显示全部楼层 |阅读模式
首先什么是基于PDF交叉引用表的PDF文件信息嵌入和提取方法.

要知道方法我们首先要对PDF的文件格式有一定的了解,下面我们先了解一下pdf的文件格式的一点小知识。我们先以文本格式打开一PDF文件第一行是
%PDF-1.4  前说明他是一PDF文件,后面写的是这个文件的使用的PDF版本,然后我们再看一下交叉引用表的位置,要看交叉引用表我们就要先看一下PDF文件的结尾,下面是PDF文件的结尾

startxref
883678
%%EOF

这就是PDF文件的结尾,我们看这个有什么用呢,看到“statxref”了吗?这个的意思是下是交叉引用表的开始位置,用十进制表示的,然后我们到交叉引用表所在的位置去看一下
xref
0 180
0000000000 65535 f
0000000801 00000 n

是这样的信息,下面就是实现的关键了,xref下面的0 180说明下面的交叉引用表是从第0个开始有180个,一个文件不一定只有一个交叉引用表,我们现在只处理只有一个的情况,多个的处理太复杂了我们这里就不讲了,我们要彼所信息存到pdf文件里又不改变原来pdf文件的格式呢,这是下面的关键了,pdf文件里换行可以用"\n"或者“\r\n”来表示,既然这样哪我们就用"\n"代表二进制的“0”用“\r\n"代表二进制的1,这样我们就能把二进制数据存到pdf文件里了,还改变不了文件的格式,是不是我们想要的功能就实现了,可能下面有人好问了,你存二进制有什么用,我们又看不明白是什么意思,但你想一下,如果二进制都能存了我们什么不能存,什么东西在计算机里最后不都是二进制,既然能存二进制我们就可存所有的东西了,我们把他们转成二进制存进去,取出来在从二进制转回来不就行了,既然能这样哪我们就开始动手吧,这个文件有180个交叉引用表,也就是说可以存180个二进制,一个汉字两个字节也就是180/2/8=11我们可以存11个汉字,这样可以看出来,其实PD可以隐藏的信息是有限的。下面就说一下怎么用C#来实现我们的想法。
首先我们要操作这个文件我们选择用FileStream为什么用这个呢,是因为我们要以二进制的方式读取
看代码,打开文件判断是不是PDF。

下面是接下来操作需要的几个就去先发上来
读取一行返回byte[]

下一行返回string

读取上一行。

有了这几个方法的帮助我们的处理就更加方便一些了
这样我们要做的就是找交叉引用表的位置。


源码下载:。积分不够可以从会员中心购买。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

 楼主| 发表于 2013-5-26 18:49:16 | 显示全部楼层
如果要处理多个交叉引用表需要改引用表的引用位置,重新计算引用表的地址,比较麻烦,功能暂时不提供,如果需要可以联系价格可商量!
回复 支持 反对

使用道具 举报

发表于 2016-4-4 16:41:20 | 显示全部楼层
亲你好,你分享的    c#实现基于PDF交叉引用表的PDF文件信息嵌入和提取方法源码下载   我很想看一下,可是我是新用户,不能下载,可否给我分享一下我的邮箱2645998520@qq.com ,非常感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|CSharp学习网 ( 鲁ICP备12009303号-1  

GMT+8, 2019-6-17 05:02 , Processed in 2.341796 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表