[英]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.