我如何执行ghostscript从c#程序

本文关键字:ghostscript 程序 执行 何执行 | 更新日期: 2023-09-27 18:06:01

我试图从我的c#程序中调用鬼脚本,传递一些参数来裁剪PDF文件的页脚,然后用新的修改版本覆盖临时文件。

我想我错误地调用了gs.exe。有没有人看到我传递给start(gs)的字符串不工作的原因?

当跟踪脚本时,它在到达System.Diagnostics.Process.Start(gs);

时触发捕获

这是process.start(gs)函数中调用的字符串

C:'gs'gs9.14'bin'gswin64c.exe -o C:'Users'myname'Desktop'assignment1'assignment1'data'temp'test.pdf -sDEVICE=pdfwrite -c "[/CropBox [24 72 559 794] /PAGES pdf mark" -f C:'Users'myname'Desktop'assignment1'assignment1'data'temp'test.pdf

这是我在控制台中得到的消息。

System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
       at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
       at System.Diagnostics.Process.Start()
       at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
       at System.Diagnostics.Process.Start(String fileName)
       at assignment1.Program.cropPDFFooter(String tempPDF) in C:'Users'tessierd'Desktop'assignment1'assignment1'Program.cs:line 78

这是我的方法的代码

public static void cropPDFFooter(string tempPDF)
    {
        try
        {
            byte[] croppedPDF = File.ReadAllBytes(tempPDF);
            string gsPath = @"C:'gs'gs9.14'bin'gswin64c.exe";
            List<string> gsArgsList = new List<string>();
            gsArgsList.Add(" -o " + tempPDF);
            gsArgsList.Add(" -sDEVICE=pdfwrite");
            gsArgsList.Add(" -c '"[/CropBox [24 72 559 794] /PAGES pdfmark'"");
            gsArgsList.Add(" -f " + tempPDF);
            var gsArgs = String.Join(null, gsArgsList);
            string gs = gsPath + gsArgs; // not needed anymore (see solution)
            // * wrong code here. 
            // System.Diagnostics.Process.Start(gs);
            // * Correct code below.
            System.Diagnostics.Process.Start(gsPath, gsArgs);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            Console.ReadLine();
        }
    }

我如何执行ghostscript从c#程序

System.Diagnostics.Process.Start(gs);占用2个parms。一个文件,然后是参数。我必须把代码改成

System.Diagnostics.Process.Start(gsPath, gsArgs);

我建议你使用Ghostscript包装. net

你可以在这里找到一个:Ghostscript。

Ghostscript Processor c# Sample

还有一个关于如何使用-c开关添加水印的示例,您可以简单地用您的cropbox后记替换:Ghostscript。. NET -传递Postscript命令(查看底部函数)