2016-03-01 94 views
0

使用Laravel的,我現在用https://github.com/clegginabox/pdf-merger合併的PDF文件,衝進下面的錯誤嘗試兩個PDF文件合併到一起,其中一個是在1.4版本時,一個Web應用程序使用的ghostscript:在PHP腳本

Exception in pdf_parser.php line 133: 

This document (C:\path-to-doc\file.pdf) probably uses a compression technique 
which is not supported by the free parser shipped with FPDI. 
(See https://www.setasign.com/fpdi-pdf-parser for more details) 

in pdf_parser.php line 133 

我在下面的答案中遵循了這個建議,使用ghostscript將1.4以上的任何pdf轉換爲1.4,這樣合併就可以工作。

FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI

我已經成功地安裝的ghostscript並將其添加到我的道路。爲了測試我有一個樣本pdf文件是1.5版叫做test.pdf,我從窗戶終端中運行以下命令:

gswin64 -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=new-file.pdf test-file.pdf

,我得到我的new-file.pdf就好了1.4版本。

現在我有以下的PHP腳本,當從網頁瀏覽器運行,只是不斷加載。如果我讓它運行一下,有時會創建一個新文件,但它的大小和空白都是3kb,並且原始pdf文件有時也會變空白。

<?php 

shell_exec("gswin64 -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=new-file.pdf test-file.pdf"); 

echo 'done'; 

任何想法我做錯了什麼?

+0

你是什麼意思「添加到我的路徑」?提前致謝。 – Marsha

+0

@Marsha看到我的回答 - 我用相關信息更新了它,讓我知道它是否沒有意義。 – haakym

+0

@Marsha如果你想在我的問題中使用這個軟件包或者試圖合併PDF文件,請告訴我,因爲我現在已經有了更多的經驗,並且可能會提供一些提示。 – haakym

回答

1

剛要發佈這個問題,並找出它,所以繼續爲他人的利益回答。

我讀了超級用戶這個答案https://superuser.com/questions/200188/reading-a-pdf-file-for-testing-in-ghostscript#answer-200784

這部分是燈泡

如果您在Windows上使用Ghostscript的,你就會有兩個可執行文件:

  1. gswin32c.exe
  2. gswin32.exe

第一個是從一個'DOS 框'(即cmd.exe窗口) - 交互式或不交互。它將 所有stderr/stdout消息打印到cmd.exe窗口中,並且還期望 可以在其中鍵入任何輸入命令。

第二個打開一個單獨的窗口,「互動「:打印 STDERR /標準輸出到單獨的窗口,預計命令有

所以我改變了我的PHP腳本使用gswin64c和輸出的文本。從命令的響應:

$output = shell_exec("gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=new-file.pdf test.pdf"); 

echo "<pre>$output</pre>"; 

這表明,我即test-file.pdf引用了錯誤的文件名稱,而不是test.pdf

Error: /undefinedfilename in (test-file.pdf) 
Operand stack: 

Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 
Dictionary stack: 
    --dict:1192/1684(ro)(G)-- --dict:0/20(G)-- --dict:78/200(L)-- 
Current allocation mode is local 
Last OS error: No such file or directory 

更新文件名後,它一切正常!

更新

爲應對這個問題瑪莎的評論...

你所說的「將它添加到我的路」是什麼意思?提前致謝。

當您添加一個可執行文件或位置的一組可執行文件到您的PATH環境變量,它允許可執行文件(S)從任何地點通過命令行調用。例如,你可以在將它添加到你的路徑後調用C:\youruser\Desktop的ghostscript,而不是在你的ghostscript文件所在的文件夾中,或者其他任何東西。

有時您正在安裝的軟件會自動爲您執行此操作,有時您需要自己手動執行此操作(如使用ghostscript)。

如何一個可執行文件添加到PATH環境變量:

  1. 我的電腦
  2. 屬性
  3. 高級系統設置
  4. 環境變量
  5. 然後可執行文件追加到的結束用戶變量/ PATH或系統變量/路徑中的現有值 - 如果您使用用戶變量,則它將僅適用於您的用戶,如果您使用系統變量,它將應用於所有用戶小號

提示:

  • 你可以跳到第3步,如果你按windows鍵+ pause
  • 必須在路徑變量用分號;
單獨的新條目

如果你谷歌的東西像「添加EXE到我的路徑窗口」我相信你會發現這方面的很多信息。希望這有助於!