如何以编程方式从打印机获取 PDF 文件的打印输出?打印输出命令应该在不弹出任何额外对话框的情况下执行。
我正在使用控制台应用程序,需要在不使用任何 3rd 方库或工具的情况下执行此操作
按照@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
您可以在此链接上关注此代码的所有讨论。
希望它有帮助。