我需要相当便宜地阅读PDF的页面大小,因此我的用户可以选择特定的页面(并以更高的细节加载它们)。
我认为使用Magick ++ API执行此操作的唯一方法是使用STL调用readImages
。这确实加载了PDF的所有页面Magick::Images
,并且对于大型PDF文档来说非常昂贵(50页的订单在我的机器上大约需要15秒。)
我在ImageMagick的论坛上阅读了a post,该论坛讲的是ReadOptions
类(在撰写本文时未记录),您可以传递给readImages
方法来读取较低密度的图像,但是这个还需要太长时间。 (大约10s)。 ReadOptions
上的其他任何选项都没有真正对速度产生重大影响。
这是我目前的代码:
std::vector<Magick::Image> PDFImageList;
Magick::ReadOptions readOptions;
readOptions.density(Magick::Geometry(2,2));
readOptions.size(Magick::Geometry(1,1));
readOptions.depth(8);
// This call takes too long.
Magick::readImages(&PDFImageList, m_pathToPDFFile, readOptions);
int numberOfPages = PDFImageList.size();
我也尝试了Magick::Image.ping()
方法,但找不到与页码相关的任何数据。
任何其他属性或无证件的ImageMagick ++功能,我可以尝试以便宜的方式获取页数吗?
答案 0 :(得分:0)
使用另一个问题的answer和Qt的流程类,程序现在在命令行上运行以下命令:
gs -q -dNODISPLAY -c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit"
返回页码作为标准输出的最后一行。由于gs可执行文件是ImageMagick的PDF阅读功能的要求,我很满意这个解决方案。它也很快。 (约50页PDF不到一秒)