我试图读没有。使用 pdf 的给定 pdf 中的页面数(通过查找“/Count xx”),但我似乎做错了什么。我将所有字符读入缓冲区并使用字符串类的 find 来获得成功。但是在我尝试过的许多文件中,它只工作了一次。我究竟做错了什么 ?
我必须使用 getline() 或其他东西逐行阅读吗?
PS:我不想使用外部库,因为这是我的大学项目,我不能使用外部工具。
提前致谢。~三角虎
我试图读没有。使用 pdf 的给定 pdf 中的页面数(通过查找“/Count xx”),但我似乎做错了什么。我将所有字符读入缓冲区并使用字符串类的 find 来获得成功。但是在我尝试过的许多文件中,它只工作了一次。我究竟做错了什么 ?
我必须使用 getline() 或其他东西逐行阅读吗?
PS:我不想使用外部库,因为这是我的大学项目,我不能使用外部工具。
提前致谢。~三角虎
你做错的是你的方法完全不适合你想要完成的事情。出于许多不同的原因 - 我在这里只列出几个:
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( ) };