2011-03-11 75 views
2

我需要编辑几个PDF文件的标题信息。 我想实现的是在%PDF-X.Y.Z之前删除所有标题数据。编辑或删除C中的PDF标题信息

我想出了一个可能的解决方案是二进制模式来打开PDF,直到%PDF-X.Y.Z找到阅读的每个字符。 然后继续阅读流的其余部分并将其保存到新文件。我认为这样我会得到一个精确的二进制PDF副本,只是不同的头文件信息。

C中最简单/最好的方法是什么? 有没有可以帮助我做到这一点的图书馆? 我也有兴趣听到解决这个问题的不同方法。

谢谢。

回答

2

假设剥离文件的开头确实解决你的问题,你所需要的的fopen,FREAD,FWRITE和FCLOSE。

打开文件以二进制模式读取。阅读,直到找到神奇的%PDF字符串。打开二进制写入的输出文件。写出该文件,从你的新%PDF字符串开始。写完后,关闭这两个文件。

+0

好吧,我正确的方式。当文件以二进制模式打开时,使用'fread'在字节后面读取字节并将该值与字符进行比较的最佳方法是什么? – Dominik 2011-03-11 09:15:49

+0

天真的方法是将其读入缓冲区,然后逐字节地前进通过缓冲区调用memcmp,以检查匹配。这可能有一个库函数。这在C++中会更容易,并且在更高级别的语言中是微不足道的! – 2011-03-11 09:25:23

+0

我明白了。将整个文件读入缓冲区对于我而言可能有点危险,因为PDF文件的大小可能为几GB。我其实选择C是因为我认为这可能是操纵/处理二进制数据的最简单方法。所以你认为我会更好地使用例如C#或Python? – Dominik 2011-03-11 09:36:46

3

其实你可以前%PDF标签特罗了所有的信息,但你让外部参照表在文件无效的结束。此表包含对PDF对象的偏移引用。

最简单的方法是:%PDF之前删除的部分,算,你有多少特罗之遥,按照减少外部参照值。

+0

或者只是用空格替换'%PDF'之前的内容! – 2011-03-11 09:04:32

+0

感谢您指出这一点。 – Dominik 2011-03-11 09:07:20

+0

@大卫赫弗南:是的,如果量不是太大,可以接受,但有点脏,解决 – p4553d 2011-03-11 09:32:18