在保存文件之前上载时,Php计数PDF文件上的页数

时间:2014-11-13 21:25:23

标签: php pdf

我有一个功能,可以将文件上传到网络存储中,如果文件是pdf文件,那么在将文件保存到存储系统之前我想确定pdf文件有多少页面。

目前我有以下内容:

    $pdftext = file_get_contents($path);
    $num = preg_match_all("/\/Page\W/", $pdftext, $dummy);
    return $num;

其中$ path是我用fopen打开文档的临时路径

此功能有时有效,但不可靠。我也知道这个功能

exec('/usr/bin/pdfinfo '.$pdf_file.' | awk \'/Pages/ {print $2}\'', $output);

但是这需要在服务器上下载文件。有任何想法或建议来实现这一目标吗?

3 个答案:

答案 0 :(得分:1)

PHP是一种服务器端语言,这意味着所有处理都在您的服务器上进行。 PHP无法确定客户端文件的详细信息,也不了解它所需的访问权限。

现在问题的答案是:它不可能。但是你可能有一个目标,为什么要检查这个,分享这个目标可能有助于获得更有建设性的答案/建议。

答案 1 :(得分:0)

正如Oldskool已经解释过,在客户端使用PHP是不可能的。您必须将PDF文件上载到服务器,然后确定页面数量。有库和命令行工具可以实现这一目标。

如果您不想将PDF文件上传到服务器(这里似乎就是这种情况),您可以使用pdf.js库。现在,客户端可以自行确定PDF文档中的页面数量。

PDFJS.getDocument(data).then(function (doc) {
    var numPages = doc.numPages;
}

还有其他库,但我不确定他们的浏览器支持(http://www.electronmedia.in/wp/pdf-page-count-javascript/

现在您只需将javascript中的页面数量提交到需要此信息的php文件即可。为了实现这一目标,您只需使用ajax即可。如果您不了解ajax,只需谷歌就可以找到足够的例子。

作为旁注;永远记住不要相信客户。客户端能够修改页数并发送完全不同的页数。

答案 2 :(得分:0)

对于那些运行Linux服务器的人来说,实际上这是可能的。您需要安装pdfinfo扩展并使用函数

  $pages = exec('/usr/bin/pdfinfo '.$pdf_file.' | awk \'/Pages/ {print $2}\'', $output);

输出正确的页码,其中$ pdf_file是上传时服务器上的临时路径。

它不适合我的原因是因为我没有安装PDFinfo。