如何以编程方式从打印机打印PDF文件? printout命令应在不弹出任何其他对话框的情况下执行。
我正在使用控制台应用程序,需要在不使用任何第三方库或工具的情况下执行此操作
答案 0 :(得分:3)
与@Freelancer所写的一样,我使用以下方法,因为它使用Adobe的注册表设置来查找Acrobat reader可执行文件的路径,但它以静默方式打印到默认打印机:
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();
}
}
}
}
答案 1 :(得分:0)
.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
您可以在此链接上关注此代码的所有讨论。
希望它有所帮助。