我们可以为打印机获取FileStream吗?

时间:2010-04-02 09:28:18

标签: c#

如果我理解正确,打印机也是操作系统视图中的文件。我可以为打印机获取.NET C#FileStream类型吗?这样做似乎很疯狂。 提前谢谢。

4 个答案:

答案 0 :(得分:3)

打印机在Win32中建模为一组位图。它由PrintDocument包装,它基本上设置了一个回调,允许您单独绘制每个页面并将它们逐个发送到打印假脱机程序,然后打印假脱机程序将数据(通常为.ps格式)发送到打印机。

这就是现代打印机的运作方式,它们是绘制页面而不是文本。只有旧式矩阵打印机以流式方式逐个字符地绘制文本。他们过去常常使用“PRN:”特殊文件。然而,这在现代环境中失去了所有意义。

好消息是,使用PrintDocument类非常容易,每个页面都有一个Graphics对象,可用于在页面的任何位置打印文本,以及绘制图形。

如果您愿意,可以通过缓存所有数据然后只为每个页面调用DrawText来模拟类似流的打印机。

答案 1 :(得分:1)

构建Windows Forms应用程序,您可以将打印机视为Graphics Device. System.Drawing.Printing命名空间为Windows窗体应用程序提供与打印相关的服务。

如果要从Windows Presentation Foundation (WPF)应用程序进行打印,请参阅System.Printing命名空间。它提供的类使您能够自动管理打印服务器,打印队列和打印作业。

答案 2 :(得分:1)

假设您要将原始数据发送到打印机,请参阅How to send raw data to a printer by using Visual C# .NET

答案 3 :(得分:0)

从.Net 3.0开始,你可以使用 PrintSystemJobInfo.JobStream

在假脱机程序中创建printjob时,例如

var job = LocalPrinter.GetDefaultQueue().AddJob();

您可以写信至

job.JobStream

关闭该流将其排队以进行打印。 有趣的是,您可以使用该流将控制代码和文本写入通用/纯文本打印机(例如LPT1并行端口冲击打印机)