我有一个功能,可以将文件上传到网络存储中,如果文件是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);
但是这需要在服务器上下载文件。有任何想法或建议来实现这一目标吗?
答案 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。