只是一邊評論; Ghostscript does 而不是'合併'PDF文件,它可以將多個PDF文件作爲輸入並創建一個全新的PDF文件,其外觀應與輸入相同,但它不合並PDF文件,輸入被完全解釋並且新文件除了與輸入文件相同的外觀之外沒有其他任何內容。
那麼,你確定Ghostscript工作正常嗎? 您是否嘗試過處理單個PDF文件? 它工作嗎?
如果不是這樣,那麼最可能的問題是您的$ PATH環境變量中沒有包含Ghostscript可執行文件的目錄(這是一個常見問題)。您可以通過在命令行提供給Ghostscript的可執行文件的完全限定路徑進行測試,所以不是:
$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$output ";
試着這麼做:
$cmd = "/usr/local/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$output ";
很明顯,你將不得不修改路徑匹配你的設置。如果可行,那麼問題很可能是該目錄不在$ PATH中,您可以添加它或只使用完整路徑。
還有一個邏輯錯誤,我不能幫你;
它在我看來像你的'foreach'將爲數組中的每個文件調用一次cmd。這意味着每個文件都將通過對Ghostscript的調用進行處理。所以每個文件都會生成一個單獨的PDF文件。由於它們都使用相同的OutputFile,它們將相互覆蓋。
如果你想使用的所有文件的輸入來創建一個單一的輸出,你需要調用Ghostscript的準確一次,不是每個輸入文件一次,並且在命令行中需要包括所有的輸入文件。
從本質上說你現在所擁有的是:
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 1.pdf
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 2.pdf
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 3.pdf
你想要的是:
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 1.pdf 2.pdf 3.pdf
因爲我什麼都不知道關於PHP我不能告訴你如何糾正。
您是否嘗試過回顯$ cmd而不是執行它,因此您可以將其複製並粘貼到終端以驗證該命令是否有效並正常工作? –
我可以試試,但我會使用哪個終端呢?我剛剛檢查了我的服務器,發現PDF文件最終被合併,輸出結果正確。自從我上次測試以來我沒有做任何事情。所以我認爲這可能只是時間問題。有沒有辦法計算可能需要多長時間? – user3292788