PHP通过ImageMagick的PDF文件中的页数

时间:2014-12-28 17:22:20

标签: php pdf imagemagick

我使用以下代码获取PDF文件中的页数。

$img = new imagick();
$img->setResolution(200,200);
$img->readImage("{$FileName}");
$NumberOfPages = $img->getNumberImages();
echo "$NumberOfPages";

代码有效,但速度很慢(每页0.5秒.29页PDF需要15秒才能传送结果)。

我错过了什么吗? 必须有一个更快的方法:

1)获取pdf中的页数

2)将单个页面转换为图像

请注意2)只有在1)完成后才有可能。 当PDF只有16页时,没有必要转换第39页。

非常感谢任何帮助。

大卫

2 个答案:

答案 0 :(得分:1)

我试用了你的代码,但它不适用于我的PDF。 我使用免费PDF来创建PDF。可能是生成的PDF没有线性化。

我在问题1098156下找到了一些代码,它似乎与我的PDF有关:

function count_pages($pdfname) {
$pdftext = file_get_contents($pdfname);
$num = preg_match_all("/\/Page\W/", $pdftext, $dummy);
return $num;
}

答案 1 :(得分:0)

根据“检测PDF文件中的页面”。我建议尽可能不使用imagemagick这个简单的任务来检测PDF文件的页面。 PDF具有“线性化”布局功能 - > http://labs.appligent.com/pdfblog/linearization/从文件开头检测一些基本的PDF元数据。 这是一个非常简单的代码来获取页面数量,我使用随机的10个PDF文件从网上测试,每次都可以使用,并且应该比使用imagemagick的文件更快。

这只是一个快速的代码,没有经过充分测试,但应该给你一些想法,只在PHP中完成这项工作。 也许并非所有PDF文件都保证了线性化布局。

$pdfcontent = file_get_contents("test.pdf", NULL, NULL, 0, 300);
preg_match("~Linearized.*?\/N ([0-9]+)~s", $pdfcontent, $pages);
if(isset($pages[1])){
    echo "Pages ".$pages[1];
}