プログラムでプリンタから PDF ファイルを印刷するにはどうすればよいですか? printout コマンドは、追加のダイアログが表示されることなく実行されます。
コンソール アプリケーションを使用しており、サード パーティのライブラリやツールを使用せずにこれを行う必要がある
@Freelancerが書いた行に沿って、Adobeのレジストリ設定を使用してAcrobatリーダー実行可能ファイルへのパスを見つけるため、次の方法を使用しますが、デフォルトのプリンターにサイレントに印刷します。
private void PrintPdf(string fileName)
{
var hkeyLocalMachine = Registry.LocalMachine.OpenSubKey(@"Software\Classes\Software\Adobe\Acrobat");
if (hkeyLocalMachine != null)
{
var exe = hkeyLocalMachine.OpenSubKey("Exe");
if (exe != null)
{
var acrobatPath = exe.GetValue(null).ToString();
if (!string.IsNullOrEmpty(acrobatPath))
{
var process = new Process
{
StartInfo =
{
UseShellExecute = false,
FileName = acrobatPath,
Arguments = string.Format(CultureInfo.CurrentCulture, "/T {0}", fileName)
}
};
process.Start();
}
}
}
}
.NET Framework は、外部プロセスを開始するために使用できる System.Diagnostics 名前空間にクラスを提供します。いくつかのプロジェクトで次のコードを使用して、さまざまな実行可能ファイルを起動しました。これを使用して、Adobe Acrobat Reader も起動できます。
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
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に属します。
このリンクで、このコードに関するすべての議論に従うことができます。
お役に立てば幸いです。