使用C ++阅读pdf页数

时间:2013-05-06 17:22:42

标签: c++ pdf

我试图读不。给定pdf中的页面使用pdf(通过查找“/ Count xx”),但我似乎做错了什么。我将所有字符读入缓冲区并使用字符串类的find来获得命中。但在我试过的许多文件中,它只工作过一次。 我做错了什么?

http://pastebin.com/2FAXPZhE

我是否必须使用getline()或其他东西逐行阅读?

PS:我不想使用外部库,因为这是我的大学项目,我不能使用外部工具。

提前致谢。 〜Deltatiger

3 个答案:

答案 0 :(得分:3)

你做错了是你的方法完全不适合你想要完成的事情。由于许多不同的原因 - 我在这里只列出了几个:

1)PDF支持增量更新,原始PDF文件和文件末尾的更新块中可能有不同数量的页面。

2)“/ Count”可能用于除文件中页面数之外的其他内容。

3)PDF文件中的页面存储在树形结构中,该树中的“/ Count”字段列出了树的该部分中的页数。在包含多个页面的PDF文件中,您可能会有许多不同的对象列出与页面有关的“/ Count”值。

简短的回答是,如果不了解PDF文件格式,就无法正确评估PDF文件中的页数(您可以从Adobe网站下载PDF规范)。您将需要使用了解文件格式的库并为您解析它,否则您将需要编写执行此操作的代码。这不是一个小项目(至少可以说)。

答案 1 :(得分:0)

我很欣赏这个问题在一年前被提出并得到了回答,但是如果其他人仍在寻找解决方案,我现在提供自己的C ++代码,现已上传到SourceForge here

您将从我的代码中看到,页数可以位于任意数量的棘手位置,通常位于压缩数据流中。

(我刚刚从几年前写的一些Delphi代码中翻译过来,所以如果有任何翻译错误,将其视为测试版本可能是明智的。但是,它已经过了适量的测试。)

答案 2 :(得分:0)

我知道这是一个较旧的线程,但是我建议使用PoDoFo库来提取PDF页数(或任何其他信息)。

以下是用于提取PDF页数的代码段。

示例:

namespace pdf = PoDoFo;
pdf::PdfMemDocument document;
document.Load( "mypdf.pdf" );
int pgcount{ document.GetPageCount( ) };