这是一个分为两部分的问题:
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。在这种情况下,服务器端使用的新类安全吗?
谢谢。
发布于 2009-10-18 20:55:48
正如我在下面的注释中所指出的,在纯托管代码中没有支持服务器端打印的解决方案。
但是,Aspose刚刚发布了一些代码,允许您从托管代码中打印XPS文档(成功地使用PInvoke调用XPS打印API)。作为记录,我认为微软反对使用PInvoke调用PInvoke打印的最初建议仅仅是因为它是一个很难使用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-08-21 04:25:52
在.Net中,支持是WPF的一部分。WPF在Windows中的使用是不受支持的(请参见MSDN),因此.Net的XPS打印,包括System.Printing的使用,也不支持服务。
同样的答案也适用于问题的“转换到GDI”部分,因为这个过程是自动发生的(如果XPS内容被打印到PrintQueue,而驱动程序不是XPS,则框架会自动将XPS内容转换为驱动程序所期望的DDI调用,如果基于GDI的应用程序正在打印)。
对于需要XPS打印的服务器端开发(服务),可以在Windows7中使用Win32 API。具体而言,请参阅XPSPrint API,它提供对XPS打印路径的访问,并支持对非XPS打印队列的自动转换,以及可用于处理XPS内容和处理打印票的API。
发布于 2009-08-20 03:04:01
如果你想让用户的浏览器从服务器代码中打印出来,那就算了吧。您应该希望的最好做法是向浏览器发送一个带有调用window.print()的javascript代码的页面。
https://stackoverflow.com/questions/1303722
复制相似问题