阅读pdf页数与c++

Reading pdf Page Count with C++

本文关键字:c++ pdf 阅读      更新时间:2023-10-16

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

http://pastebin.com/2FAXPZhE

我必须使用getline()或其他东西逐行读取它吗?

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

提前感谢。~ Deltatiger

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

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

2)"/Count"可以用于完全不同的东西,而不是文件中的页面数。

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

简短的回答是,如果不了解PDF文件格式(您可以从Adobe网站下载PDF规范),就不可能正确地评估PDF文件中的页数。您要么必须使用一个能够理解文件格式并为您解析它的库,要么需要编写相应的代码。这不是一个小项目(至少可以说)。

我很感激这个问题在一年前就被提出和回答了,但如果其他人还在寻找解决方案,我提供了我自己的c++代码,现在上传到SourceForge 这里

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

(我只是从几年前我写的一些Delphi代码中翻译出来的,所以如果有任何翻译错误,将其视为beta版本可能是明智的。)尽管如此,它还是通过了适量的测试。)

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

下面是提取PDF页数的代码片段。

的例子:

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