3

これらは私が達成しようとしているステップです:

  1. サーバーにPDFドキュメントをアップロードします。
  2. GhostScriptを使用してPDFドキュメントを一連の画像に変換します(すべてのページが画像に変換されます)。
  3. 画像のコレクションをクライアントに送り返します。

これまでのところ、私は#2に興味があります。

まず、gswin32c.exegsdll32.dllの両方をダウンロードし、PDFを画像のコレクションに手動で変換することに成功しました( cmdを開いて次のコマンドを実行しました)。

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf

次に、gswin32c.exegsdll32.dllをWebプロジェクトのClientBinに配置し、プロセスを介して.exeを実行することを考えました。

System.Diagnostics.Process process1 = new System.Diagnostics.Process();
process1.StartInfo.WorkingDirectory = Request.MapPath("~/");
process1.StartInfo.FileName = Request.MapPath("ClientBin/gswin32c.exe"); 
process1.StartInfo.Arguments = "-dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf"
process1.Start(); 

残念ながら、ClientBinには何も出力されませんでした。誰もがなぜアイデアを思いついたのですか?任意の推奨事項を高く評価します。

4

1 に答える 1

3

私はあなたのコードを試してみましたが、うまくいっているようです。次のことを確認することをお勧めします。

  1. somepdf.pdf が gs プロセスの作業フォルダーにあるかどうかを確認するか、コマンド ラインでファイルへのフル パスを指定します。次のようにして、ghostscript の出力を確認することも役に立ちます。

    .... process1.StartInfo.RedirectStandardOutput = true; process1.StartInfo.UseShellExecute = false; process1.Start(); // 出力文字列を読み取る output = process1.StandardOutput.ReadToEnd(); ... process1.WaitForExit(); ...

    gs がファイルを見つけられない場合、出力ストリームに "エラー: /undefinedfilename in (somepdf.pdf)" が表示されます。

  2. もう 1 つの提案は、gs プロセスが終了して結果の image_N.jpg ファイルが生成されるのを待たずにスクリプトを続行することです。process1.WaitForExit を追加すると問題が解決すると思います。

于 2009-12-22T05:36:53.063 に答える