2009-12-21 75 views
3

服務器上的PDF轉換爲圖像的集合,這些都是我想實現的步驟:使用GhostScript的

  1. 上傳服務器上的PDF文檔。
  2. 使用GhostScript將PDF文檔轉換爲一組圖像(每頁都轉換爲圖像)。
  3. 將圖像集合發送回客戶端。

到目前爲止,我對#2感興趣。

首先,我下載了兩個gswin32c.exegsdll32.dll和管理,以PDF文件手動轉換爲圖像的集合(我打開CMD 運行命令波紋管):

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf 

然後我想,我會把gswin32c.exegsdll32.dll放到我的web項目的ClientBin中,然後通過Process運行.exe。

System.Diagnostics.Process process1 = new System.Diagnostics.Process(); 
process1.StartInfo.WorkingDirectory = Request.MapPath("~/"); 
process1.StartInfo.FileName = Request.MapPath("ClientBin/gswin32c.exe"); 
process1.StartInfo.Arguments = "-dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf" 
process1.Start(); 

不幸的是,在ClientBin中沒有輸出任何內容。任何人都知道爲什麼?任何建議將不勝感激。

回答

3

我試過你的代碼,它似乎工作正常。我會建議您檢查以下幾件事:

  1. 驗證您somepdf.pdf是在GS進程的工作文件夾或指定命令行文件的完整路徑。通過做這樣的事情來看到ghostscript的輸出也是有用的:

    .... process1.StartInfo.RedirectStandardOutput = true; process1.StartInfo.UseShellExecute = false; process1.Start(); //讀取輸出 string output = process1.StandardOutput.ReadToEnd(); ... process1.WaitForExit(); ...

    如果gs找不到您的文件,您將在輸出流中收到「(錯誤:/ undefinedfilename in(somepdf.pdf)」。

  2. 另一個建議是,您不用等待gs過程完成並生成生成的image_N.jpg文件即可繼續執行腳本。我想加入process1.WaitForExit應該可以解決這個問題。