2014-10-09 60 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