【问题标题】:How do I send a PDF in a MemoryStream to the printer in .Net?如何将 MemoryStream 中的 PDF 发送到 .Net 中的打印机?
【发布时间】:2009-09-08 09:05:28
【问题描述】:

我有一个使用 iTextSharp 在内存中创建并包含在 MemoryStream 中的 PDF。我现在需要将 MemoryStream PDF 翻译成打印机可以理解的内容。

我过去曾使用 Report Server 将页面呈现为打印机格式,但我无法将其用于此项目。

是否有本地 .Net 方式来执行此操作?例如,如果 GhostScript 是 .Net 程序集,则可以,但我不想将任何非 .Net 的东西与我的安装程序捆绑在一起。

.Net 中的 PrintDocument 类非常适合将内容发送到打印机,但我仍然需要在页面级别将其从 PDF 流转换为 GDI。

有什么好的提示吗?

提前致谢

瑞恩

【问题讨论】:

    标签: .net printing memorystream


    【解决方案1】:

    您需要像 GhostScript 这样的 RIP 来解释 PDF。我可以给你 C# 包装器,它可以包装 dll 调用以直接打印到打印机,但是有与 GhostScript 相关的再分发许可证。

    我使用了 LeadTools Raster Imaging Pro for .Net 来解释 PDF,不过您需要检查它的打印功能。这是一个昂贵的选项并且不是免版税的(这实际上在内部使用了 GhostScript,但是非常包含在 LeadTools dll 中。这个库运行良好并且绕过了许可。

    不确定 Acrobat Reader 是否有可用的 API?你可以调查一下。

    HTH

    【讨论】:

    • C# 包装器听起来很方便,我将不胜感激。谢谢
    【解决方案2】:

    另一种更简单的方法是将您的 pdf 保存到临时文件中,并在 Process.Start 中给出以下命令,这将使 pdf 直接打印,如 Adobe Reader Print Throough Command Line 中所述

    Process.Start("AcroRd32.exe /t \"C:\test.pdf\"");
    

    我会说这是最好的方法,因为 Adob​​e 肯定会以正确的方式打印它,而不是依赖于任何其他工具,它们很好,但它们不是 100% 正确。

    【讨论】:

    • 这听起来确实是一个简单的选择!
    • 我认为窗口保持打开和最新版本没有通过 cmd 行提供打印支持存在问题。不过我会检查的,谢谢。
    • Adobe 有一个 API,但实际上 Adob​​e 有一个 activex 控件很简单,您可以在 .NET WinForms 中轻松使用它,而且我认为无需额外提供任何东西即可使用它,您将拥有调查,它记录在这里adobe.com/devnet/acrobat/pdfs/Acrobat_SDK_developer_faq.pdf
    • 它在最新版本中工作,但意味着我必须做一些工作来隐藏窗口并在后台终止进程。但这比安装另一个组件要好得多。
    • 来自 Adob​​e '为了使用 Acrobat 提供的 OLE 对象,您必须在系统上安装完整的 Acrobat 产品,并且在 Visual Basic 项目的项目引用中包含 Acrobat.tlb 文件.'.所以不要走纯粹的程序化路线。
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 2013-07-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多