【问题标题】:How to print a pdf in C# by using如何使用 C# 在 C# 中打印 pdf
【发布时间】:2013-11-22 10:47:46
【问题描述】:

我在 C# 应用程序中使用“进程”打印 pdf 文件。但我无法获得打印状态。我发现可以使用 System.management 和 System.printing 与打印机/队列进行交互。我做了很多使用这两个命名空间尝试 n 错误,但无法打印文件。有任何可用示例说明如何使用这些命名空间将 pdf 文档打印到打印机?

【问题讨论】:

    标签: c# printing process system.printing system.management


    【解决方案1】:

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

    请参阅this question 及其答案,了解不同方法的概览。

    如果您使用的是 linux,您可以轻松调用 lp 命令。

    【讨论】:

    【解决方案2】:

    这个问题已经在这里How can I send a file document to the printer and have it print?得到解答。

    您无法使用标准方法打印 pdf,因为它需要先渲染,您可以使用 Ghostscript、Adobe Acrobat 或其他工具。

    编辑:约翰更快

    【讨论】:

    • 但是这些例子没有显示如何获取打印状态..他们使用进程来打印文件。从这些进程中是否有可能获得打印状态?我猜没有!
    • @mmu 不是直接的,不。但是看看 PrintServer.GetPrintQueues。这可以为您提供打印机状态。哟可以在第二个线程或其他东西中检查它。我不确定您是在寻找打印机状态还是打印作业状态。如果您想要打印作业状态,请查看 Win32_PrintJob。
    【解决方案3】:

    如果您有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 时我没有任何问题,但我很清楚为什么它对其他人不起作用。

    我应该提到,您必须有一台支持直接打印的打印机,因为您将信息直接发送到打印机。根据我的经验,这适用于 Brother HL 系列和夏普企业打印机。我希望这也适用于其他东西,例如 Excel 文档,但事实并非如此。幸运的是,这些很容易以其他方式打印。

    【讨论】:

    • 如果投反对票的人能提供反馈,引导他们做出决定,那就太好了。这对我来说非常有效,但我全神贯注。可能有一个特定的案例,如果您与他人分享会很好。
    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多