2

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();
        }
    }
4

2 に答える 2

2

System.Diagnostics.Process.Start(gs);2パーマかかります。ファイル、次に引数。コードを次のように変更する必要がありました

System.Diagnostics.Process.Start(gsPath, gsArgs);
于 2014-05-30T15:17:31.950 に答える
1

.NETには Ghostscript ラッパーを使用することをお勧めします。

ここで見つけることができます: GitHub の Ghostscript.NET

使用例はここにあります: Ghostscript プロセッサ C# サンプル

-cスイッチを使用して透かしを追加する方法の例もあります。このポストスクリプトは、クロップボックスのポストスクリプトに簡単に置き換えることができます: Ghostscript.NET - Postscript コマンドの受け渡し(下の関数を見てください)

于 2014-05-30T18:57:56.433 に答える