c# - C# 中的点阵打印?

标签 c# printing xps

我正在尝试使用 C# 打印到点阵打印机(各种型号),目前我正在使用 Win32 API(您可以在网上找到很多示例)调用以通过我的 C# 将转义码直接发送到打印机应用。这很好用,但是......

我的问题是因为我正在生成转义码而不依赖于 Windows 打印系统,打印输出无法发送到任何“普通”打印机或 PDF 打印驱动程序之类的东西。 (这现在导致了一个问题,因为我们正在尝试使用 Easy Print [基于 XPS] 在 2008 终端服务器上使用该应用程序)

问题是: 如何在不使用直接打印、转义码等的情况下,使用 C# 将格式化文档(预印文具上的发票)打印到点阵打印机(爱普生、Oki 和松下……各种型号)。

** 澄清一下,我正在尝试 GDI+(System.Drawing.Printing)之类的东西,但问题是它很难像旧代码那样排列起来。 (旧代码绕过 Windows 驱动程序将字符直接发送到打印机。)有什么可以改进的建议,以便他们可以使用 GDI+,但仍然像旧代码那样排队?

最佳答案

您可能应该使用报告工具来制作模板,使您或用户能够根据预打印信纸正确定位字段。

使用点阵打印机,您基本上必须在两种模式中的任何一种下工作:

  • 行/列文本的简单打字机模式,您可以在其中发送转义序列来管理打印机硬件中包含的少量字体,并且必须管理换行等。
  • 页面经过光栅化后的图形输出,打印机驱动程序仅驱动打印头和引脚输出点。

第一种用法在 Windows 下大多被弃用,因为它没有提供太多控制输出的方式,并且每台打印机都有自己的特性,软件变得笨拙且难以预测和定位页面上的东西(没有所见即所得)。

第二个只是使用图形页面范例,使定位文本和图形独立于打印机的实际功能。
使用预印文具时,您的任务是将数据正确放置在页面上。
手动执行此操作非常耗费资源,当然不建议在代码中创建布局,因为如果您的打印机、页面格式或打印的文具发生变化,您将不得不更改代码。

最好的方法是只使用 .Net 提供的标准打印模型和一个报告工具,该工具允许您定义模型和模板,将放置正确的文本和图形,然后从代码中驱动它。

Visual Studio 附带了一个版本的 Crystal Reports,但还有其他更好的报告系统(例如,我使用 developer express 中的那个),其中一些甚至是 free .

关于c# - C# 中的点阵打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/246233/

相关文章:

c# - 从 PackagePart 流读取不释放内存

c# - 如何在 Windows 中使用 UniDrv 或 XPS 驱动程序 v3 设置虚拟打印机和显示器

c# - 跨线程交互C#

javascript - 打印多个选定的文档

c# - Reactive Extensions .NET 3.5 中的 ConcurrentDictionary 在哪里

css - 同一页面的多个打印 css

python - 使用 print() 时如何换行和缩进长行?

printing - 使用 WPF XPS 查看器打印 XPS 时的默认布局方向

c# - HtmlAgilityPack - 删除节点后保留文本位置

c# - JSON.net 异步写入文件