获取 PDF 文档中的页数
这个问题是用来参考和比较的。解决方案是下面接受的答案。
我花了好几个小时搜索一种快速简便但大多准确的方法来获取PDF文档中的页数。由于我为一家经常使用PDF的图形印刷和复制公司工作,因此在处理文档之前必须精确地知道文档中的页数。PDF文档来自许多不同的客户端,因此它们不是使用相同的应用程序生成的和/或不使用相同的压缩方法。
以下是我发现的一些答案不足或根本不起作用:
使用 Imagick(PHP 扩展名)
Imagick需要大量的安装,apache需要重新启动,当我最终让它工作时,它需要花费惊人的时间来处理(每个文档2-3分钟),并且它总是在每个文档中返回页面(到目前为止还没有看到Imagick的工作副本),所以我把它扔掉了。这两种方法都是如此。1
getNumberImages()
identifyImage()
使用 FPDI(一个 PHP 库)
FPDI易于使用和安装(只需提取文件并调用PHP脚本),但FPDI不支持许多压缩技术。然后,它返回一个错误:
FPDF 错误:本文档(test_1.pdf)可能使用了 FPDI 附带的免费解析器不支持的压缩技术。
打开流并使用正则表达式进行搜索:
这将在流中打开 PDF 文件并搜索某种字符串,其中包含页数或类似内容。
$f = "test1.pdf";
$stream = fopen($f, "r");
$content = fread ($stream, filesize($f));
if(!$stream || !$content)
return 0;
$count = 0;
// Regular Expressions found by Googling (all linked to SO answers):
$regex = "/\/Count\s+(\d+)/";
$regex2 = "/\/Page\W*(\d+)/";
$regex3 = "/\/N\s+(\d+)/";
if(preg_match_all($regex, $content, $matches))
$count = max($matches);
return $count;
-
/\/Count\s+(\d+)/
(查找 )不起作用,因为只有少数文档内部有参数,因此大多数时候它不会返回任何内容。源。/Count <number>
/Count
-
/\/Page\W*(\d+)/
(查找 )不获取页数,主要包含一些其他数据。源。/Page<number>
-
/\/N\s+(\d+)/
(查找 ) 也不起作用,因为文档可以包含 多个值 ;大多数(如果不是全部)不包含页数。源。/N <number>
/N
那么,什么是可靠和准确的工作呢?