繁体   English   中英

保存文件之前上传时,PDF文件上的php计数页数

[英]Php count number of pages on PDF file upon upload prior to saving file

我有一个函数可以将文件上传到网络存储中,如果文件是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);

但这需要将文件下载到服务器上。 有什么想法或建议可以做到这一点?

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

因此,您现在的问题的答案是:不可能。 但是您可能会想到一个目标,为什么要检查这一点,分享这个目标可能有助于获得更具建设性的答案/建议。

正如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,只需在Google上搜索就可以了。

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

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

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

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

它对我不起作用的原因是因为我没有安装PDFinfo。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM