2

コンソール アプリケーションを使用してバックグラウンドで PDF ドキュメントを印刷しようとしていました。私はそれを行うためのプロセスを使用しました。コンソール アプリケーションは PDF ファイルをプリンターに送信しますが、最小化モードでバックグラウンドで開かれている Adob​​e Reader は、次のエラーをスローしています。「このドキュメントを開くときにエラーが発生しました。このファイルが見つかりません。」この結果、複数回印刷中にプロセスを強制終了できませんでした。このエラーを取り除く可能性はありますか? 私の要件は、プロセスを使用してpdfファイルを印刷することです.pdfファイルを最小化モードで開く必要があり、印刷が完了したらリーダーを自動的に閉じる必要があります。次のコードを試しましたが、それでもエラーがスローされます..

string file = "D:\\hat.pdf"; 
PrinterSettings ps = new PrinterSettings();
string printer = ps.PrinterName;
Process.Start(Registry.LocalMachine.OpenSubKe(@"SOFTWARE\Microsoft\Windows\CurrentVersion"+@"\App Paths\AcroRd32.exe").GetValue("").ToString(),string.Format("/h /t \"{0}\" \"{1}\"", file, printer));
4

1 に答える 1

0

ドキュメントを印刷するときにバックグラウンドで Acrobat Reader を開きたいので、次のようなものを使用できます。

private static void RunExecutable(string executable, string arguments) 
{
   ProcessStartInfo starter = new ProcessStartInfo(executable, arguments);
   starter.CreateNoWindow = true;
   starter.RedirectStandardOutput = true;
   starter.UseShellExecute = false;

   Process process = new Process();
   process.StartInfo = starter;
   process.Start();

  StringBuilder buffer = new StringBuilder();
  using (StreamReader reader = process.StandardOutput) 
  {
    string line = reader.ReadLine();
    while (line != null) 
    {
      buffer.Append(line);
      buffer.Append(Environment.NewLine);
      line = reader.ReadLine();
      Thread.Sleep(100);
    }
  }
  if (process.ExitCode != 0) 
 {
    throw new Exception(string.Format(@"""{0}"" exited with ExitCode {1}. Output: {2}", 
executable, process.ExitCode, buffer.ToString());  
 }

}

上記のコードをプロジェクトに組み込み、次のように使用することで、PDF を印刷できます。

string pathToExecutable = "c:\...\acrord32.exe";
RunExecutable(pathToExecutable, @"/t ""mytest.pdf"" ""My Windows PrinterName""");

このコードはhttp://aspalliance.com/514_CodeSnip_Printing_PDF_from_NET.allから取得したものです。

Acrobat Reader をバックグラウンドで開く必要がなく、他のドキュメントと同様に PDF を印刷するだけの場合は、PrintDocument クラスを参照してください。

http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.print.aspx

于 2012-10-04T08:22:22.447 に答える