2014-10-09 204 views
0

GhostScript的v9.10 64位版本轉換列表使用Ghostscript

我想借此JPG文件的列表,並把它們變成每張圖片都有自己的頁面一個PDF文件爲PDF。

我試圖按照這裏使用的方法: Using Ghostscript to convert JPEG to PDF但我得到錯誤。

這裏是我的命令:

C:\Temp>gswin64c -sDEVICE=pdfwrite -o cafb0173-f4be-47a8-a39e-f479ca0a4d09.pdf viewjpeg.ps -c 5c520934-461a-44f3-9f00-9fdc9fe666c1.jpg 

這裏是我所得到的:

GPL Ghostscript 9.10 (2013-08-30) 
Copyright (C) 2013 Artifex Software, Inc. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Error: /undefined in 5c520934-461a-44f3-9f00-9fdc9fe666c1.jpg 
Operand stack: 

Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_pus 
h --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push .runexec2 -- 
nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 
Dictionary stack: 
    --dict:1179/1684(ro)(G)-- --dict:0/20(G)-- --dict:80/200(L)-- 
Current allocation mode is local 
Last OS error: No such file or directory 
GPL Ghostscript 9.10: Unrecoverable error, exit code 1 

我使用的完整路徑viewjpeg.ps嘗試過了,我試圖把viewJPEG showpage在最終,那也沒有幫助。

當我運行此C#代碼然而,:

 try 
      { 
       var guid = System.Guid.NewGuid().ToString(); 
       Process p = new Process(); 
       p.StartInfo.WorkingDirectory = @"C:\Temp"; 
       p.StartInfo.FileName = Program.ghostScriptLocation; 
       p.StartInfo.Arguments = " -sDEVICE=pdfwrite -o " + guid + ".pdf " + "\""+Program.viewJPEGLoc+"\"" +" -c " + String.Join(" ", pictures.ToArray()); 
       p.StartInfo.UseShellExecute = false; 
       p.StartInfo.RedirectStandardOutput = true; 
       p.Start(); 

       string outp = p.StandardOutput.ReadToEnd(); 
       p.WaitForExit(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
     } 

得到了一個空白的PDF文件,以及一個錯誤,說「不可恢復的錯誤,退出代碼1」

回答

1

繼viewjpeg.ps你有put「-c」這個開關的意思是'把下面的命令行看作是PostScript,直到遇到-f'「,所以Ghostscript會試圖解析」5c52 ...... jpg「作爲PostScript操作,因爲這是亂碼在PostScript中,出現錯誤

從viewjpe g.ps:

% Usage example: 
% (jpeg-6/testimg.jpg) viewJPEG 

所以你的命令行閱讀:

C:\ TEMP> gswin64c -sDEVICE = pdfwrite -o cafb0173-f4be-47a8-a39e-f479ca0a4d09.pdf viewjpeg.ps -c 「(5c520934-461a-44f3-9f00-9fdc9fe666c1.jpg)viewJPEG」 -f

更新 我寧願認爲,問題是,你不能得到viewJPEG工作。一旦這個工作正常,好吧,viewjpeg在多個文件上運行並不是非常困難。下面是一個例子:

C:\溫度> gswin64c -sDEVICE = pdfwrite -o cafb0173-f4be-47a8-a39e-f479ca0a4d09.pdf viewjpeg.ps -c「(file1.jpg)viewJPEG(file2.jpg)viewJPEG( file3.jpg)viewJPEG「-f

顯然你可以根據需要展開命令行。當然,如果你繼續爲你的JPEG文件使用非常長的名字,你可能會用盡命令行,所以你會想切換到使用命令文件(請參閱Ghostscript文檔)或將所有文件名放在一個文件中編寫PostScript從文件中提取名稱,然後在每個文件上執行viewJPEG。

這當然會將所有JPEG圖像粘貼到一個PDF文件中。如果你不喜歡,那麼你將不得不爲輸出文件使用'%d'語法,這樣每個頁面都會轉到一個單獨的編號文件,或者您必須編寫一個腳本來爲每個頁面調用一次Ghostscript文件在您的列表中。

+0

我的問題標題提到了一個文件列表。我如何做到這一點與多個文件? – Houseman 2014-10-13 16:54:28

+0

那麼,你可以編寫一個腳本來爲你想要處理的每個文件調用一次Ghopstscript。或者,您可以修改viewjpeg.ps程序併爲其提供多個文件。例如,您可以提供一個字符串數組,並讓viewjpeg.ps程序在數組中循環,而不是使用單個文件名的字符串。 – KenS 2014-10-13 17:55:53

+0

因此,使用stockjpeg.ps文件,將多個jpg文件封裝到一個PDF中是不可能的? – Houseman 2014-10-13 18:12:27

相關問題