简体   繁体   English

使用Ghostscript将jpg列表转换为pdf

[英]Convert list of jpgs to pdf with ghostscript

GhostScript v9.10 64bit version GhostScript v9.10 64位版本

I'd like to take a list of jpgs and turn them into a single pdf file where each image has its own page. 我想获取一张jpg列表,然后将其转换为一个pdf文件,每个图像都有自己的页面。

I tried to follow the method used here: Using Ghostscript to convert JPEG to PDF but I'm getting errors. 我尝试遵循此处使用的方法: 使用Ghostscript将JPEG转换为PDF,但出现错误。

Here is my command: 这是我的命令:

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

Here is what I get: 这是我得到的:

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

I've tried using the full path to viewjpeg.ps, and I've tried putting viewJPEG showpage at the end, and that didn't help either. 我尝试使用完整路径查看viewjpeg.ps,并且尝试将viewJPEG showpage放在最后,但这也无济于事。

When I run this c# code, however: 但是,当我运行此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);
        }

I get a blank pdf file as well as an error saying "Unrecoverable error, exit code 1" 我得到一个空白的pdf文件以及一个错误消息“无法恢复的错误,退出代码1”

Following viewjpeg.ps you have put "-c" This switch means 'treat the following command line as PostScript, up until a -f is encountered". So Ghostscript then tries to parse "5c52......jpg" as PostScript operations. Since that is gibberish in PostScript, you get an error. 在viewjpeg.ps之后,您放置了“ -c”。此开关的意思是“将以下命令行作为PostScript处理,直到遇到-f。”因此Ghostscript然后尝试将“ 5c52 ...... jpg”解析为PostScript。由于这在PostScript中是乱码,因此会出现错误。

From the header of viewjpeg.ps: 从viewjpeg.ps的标题中:

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

So your command line should read: 因此,您的命令行应显示为:

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

Update I rather felt that the problem was that you couldn't get viewJPEG to work. 更新我宁愿感到问题在于您无法使viewJPEG正常工作。 Once that is working, well, its not terribly hard to have viewjpeg operate on multiple files. 一旦可以正常工作,让viewjpeg对多个文件进行操作并不难。 Here's an example: 这是一个例子:

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

Obviously you can expand the command line as required. 显然,您可以根据需要扩展命令行。 Of course if you continue to use extremely long names for your JPEG files you'll probably run out of command line, so you will want to switch to using a command file (see the Ghostscript documentation) or put all the filenames in a file and write PostScript to pull the names from the file and then execute viewJPEG on each one. 当然,如果您继续为JPEG文件使用极长的名称,则可能会用完命令行,因此您将需要切换为使用命令文件(请参阅Ghostscript文档)或将所有文件名放在文件中,然后编写PostScript以从文件中提取名称,然后在每个文件上执行viewJPEG。

This will, of course, stick all the JPEG images into one PDF file. 当然,这会将所有JPEG图像粘贴到一个PDF文件中。 If you don't like that then you'll have to use the '%d' syntax for the output file, so that each page goes to a separate numbered file, or you will have to write a script to invoke Ghostscript once for each file in your list. 如果您不喜欢这样做,则必须对输出文件使用'%d'语法,以便将每个页面转到单独的编号文件,否则您将必须编写一个脚本来为每个脚本调用一次Ghostscript文件在您的列表中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM