2013-11-22 48 views
2

打印PDF在C#应用程序中使用'process'打印PDF文件,但是我无法获得打印状态。我发现可以使用System.management与打印机/队列进行交互,并且System.printing.I使用这两个命名空间进行了大量试验,但无法打印文件。有关如何使用这些命令将PDF文档打印到打印机的例子可用吗?如何在C#中使用

回答

1

System.Printing不能用于打印PDF。 PDF必须首先呈现给可打印的文件。

请参阅this question及其答案的不同方法的好概述。

如果你在linux上,你可以轻松地调用lp命令。

0

此问题已在这里回答How can I send a file document to the printer and have it print?

您不能使用标准方法打印PDF,因为它需要首先渲染,您可以使用Ghostscript,Adobe Acrobat或其他方法。

编辑:约翰是快

+1

但是这些例子并没有显示如何获得打印状态..他们使用进程来打印文件。从这些进程是否有可能获得打印状态?我觉得不是!! – flute

+0

@mmu不直接,没有。但看看PrintServer.GetPrintQueues。这可以给你一个打印机状态。哟可以在第二个线程或其他东西中检查它。我不确定您是否查找打印机状态或打印作业状态。如果您想要打印作业状态,请查看Win32_PrintJob。 – BudBrot

1

如果你有一个WPF应用程序,然后使用System.Printing

这里是代码:

var file = File.ReadAllBytes(pdfFilePath); 
var printQueue = LocalPrintServer.GetDefaultPrintQueue(); 

using (var job = printQueue.AddJob()) 
using (var stream = job.JobStream) 
{ 
    stream.Write(file, 0, file.Length); 
} 

现在,这个命名空间必须用WPF应用程序中使用。它与ASP.NETWindows Service不一致。它不应该与Windows Forms一起使用,因为它有System.Drawing.Printing。我没有使用上述代码打印PDF格式的问题,但我全神贯注于为什么它不适用于其他人。

我应该提到,您必须有一台支持直接打印的打印机,因为您将信息直接发送到打印机。根据我的经验,这与兄弟HL系列和夏普企业打印机一起工作。我希望这可以用于其他的东西,比如Excel文档,但是它不会。幸运的是,这些很容易以其他方式打印。

+0

如果谁给了这一点,那么这将是一件好事,它会提供反馈,让他们做出决定。这对我来说非常合适,但我非常喜欢。可能有一个特定的案例,如果你与其他人分享会很好。 –