簡體   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