1

这是一个两部分的问题:

1.

服务器端不支持原始 .NET 打印类(在 System.Drawing.Printing 中)。(参见http://msdn.microsoft.com/en-us/library/system.drawing.printing(VS.80).aspx

我认为服务器端支持较新的基于 XPS 的打印类(在 System.Printing 中),例如在 ASP.NET 应用程序和 Windows 服务中,但我无法证明这一点。微软还没有回答我的问题。

这里有人知道吗?

2

新的基于 XPS 的打印有时会在内部转换为 GDI。这适用于唯一可用的驱动程序是旧式驱动程序的情况,即使应用程序正在使用新的打印类进行打印。请参阅http://msdn.microsoft.com/en-us/library/ms742418.aspx。在这种情况下,新类在服务器端使用是否安全?

  • 澄清一下 - 这完全是关于服务器打印的东西。出于本讨论的目的,根本不涉及 Web 浏览器。服务器,无论是 Windows 服务还是 asp.net,都需要在连接到服务器的打印机上直接打印出文档。

谢谢。

4

4 回答 4

4

正如我在下面的评论中所指出的,纯托管代码中的服务器端打印没有受支持的解决方案。

但是,Aspose 刚刚发布了一些代码,可以让您从托管代码打印 XPS 文档(成功使用 PInvoke 调用 XPS Print API)。[作为记录,我相信微软最初反对使用 PInvoke 调用 XPS 打印的建议仅仅是因为它是一个难以与使用 PInvoke 交互的 API。但是 Aspose 似乎成功了,这是个好消息,因为它消除了涉及分离任何单独的非托管 DLL 的需要。]

总而言之,Aspose 解决方案看起来像是从 ASP.NET 和 Windows 服务打印复杂文档的最简单且完全受支持的方法。

此处的详细信息:http ://www.aspose.com/documentation/.net-components/aspose.words-for-.net-and-java/howto-print-a-document-on-a-server-via-the -xpsprint-api.html

于 2009-10-18T20:55:48.570 回答
0

在 .Net XPS 中,支持是 WPF 的一部分。不支持在 Windows 服务中使用 WPF(请参阅MSDN),因此服务也不支持使用 .Net 进行 XPS 打印,包括使用 System.Printing。

相同的答案适用于问题的“转换为 GDI”部分,因为该过程自动发生(如果 XPS 内容被打印到驱动程序不是 XPS 的 PrintQueue,框架会自动将 XPS 内容转换为 DDI 调用如果基于 GDI 的应用程序正在打印,则由驱动程序预期)。

对于需要 XPS 打印的服务器端开发(服务),Windows 7 中提供了 Win32 API。具体而言,请参阅 XPSPrint API,它提供对 XPS 打印路径的访问并支持非 XPS 打印队列的自动转换以及可用于操作 XPS 内容和处理打印票证的 API。

于 2009-08-21T04:25:52.813 回答
-1

如果您试图让用户的浏览器从服务器代码打印,请忘记它。您应该希望的最好的结果是向浏览器发送一个页面,其中包含一些调用window.print().

于 2009-08-20T03:04:01.613 回答
-1

我认为您不需要任何这些 ASPnose API。

这里有示例代码可以做到这一点:

https://groups.google.com/forum/?fromgroups#!msg/pdfnet-sdk/fOuGOvx06Tk/EckAX-ga2i8J

于 2013-05-31T12:51:57.097 回答