我试图读不。给定pdf中的页面使用pdf(通过查找“/ Count xx”),但我似乎做错了什么。我将所有字符读入缓冲区并使用字符串类的find来获得命中。但在我试过的许多文件中,它只工作过一次。 我做错了什么?
我是否必须使用getline()或其他东西逐行阅读?
PS:我不想使用外部库,因为这是我的大学项目,我不能使用外部工具。
提前致谢。 〜Deltatiger
答案 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( ) };