1
private void printfunction(string cmd)
  {
   string command = cmd;

   // Create a buffer with the command
   Byte[] buffer = new byte[command.Length];
   buffer = System.Text.Encoding.ASCII.GetBytes(command);

   // Use the CreateFile external functo connect to the LPT1 port
   SafeFileHandle printer = CreateFile("LPT1:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero);

   // Aqui verifico se a impressora é válida
   if (printer.IsInvalid == true)
   {
    MessageBox.Show("Printer not found!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return;
   }

   // Open the filestream to the lpt1 port and send the command
   FileStream lpt1 = new FileStream(printer, FileAccess.ReadWrite);
   lpt1.Write(buffer, 0, buffer.Length);

   // Close the FileStream connection
   lpt1.Close();
  }

我一直在使用上面的代码功能将原始数据发送到我支持 ESC/POS 的 EPSON TM88III 打印机。

默认情况下,我在打印机中只发送了 3 个字体。但我不想用 ARIAL FONT 打印。我们如何以 Arial 字体打印。

请不要建议我使用 Windows 打印后台处理程序或打印机驱动程序。我想通过发送原始数据进行打印。

我们应该怎么做?

编码是使用 Visual Studio 2008 在 C#.NET 中完成的。

4

4 回答 4

1

这在技术上可以通过将打印机置于图形模式并发送像素数据来实现。您必须在程序中创建单色位图,Bitmap 和 Graphics 类可以完成工作。您将使用带有用 Arial 初始化的 Font 的 Graphics.DrawText 以按照您想要的方式获取文本。将位图像素编码为打印机命令是非常重要的部分,请确保有一本不错的打印机编程手册。

正是打印机驱动程序所做的。它会一样慢。

于 2011-01-25T11:24:50.823 回答
0

据我所知,TM88 的 Windows 驱动程序只是将打印输出作为位图发送到打印机,因为 TM88 本身不支持固定宽度文本、条形码和位图以外的任何内容。

您可以使用转义码在 serif 和 sans-serif 字体之间切换,但它们都是固定宽度的。

于 2011-01-25T11:24:56.657 回答
0

根据您的打印机,您应该使用其他代码。

EPSON ESC/P 上的这个维基百科条目解释了很多。

将“ESC k 1”(ESC = 代码 27)发送到打印机,将其放入 Sans Serif 字体。但我不认为这是成比例的。

如果您真的想使用自己的字体。您可以将它(以黑色/白色)渲染到 Image/Bitmap 对象。将打印机置于图形模式,然后逐像素打印。(实际上您每 8 或 9 个像素打印一次)。

于 2011-01-25T11:14:34.653 回答
0

那是做不到的。按照惯例,原始文本使用等宽字体(例如 Courier)打印。

如果您只需要它与您的特定打印机型号一起使用,您可以尝试使用 Postscript,但您的打印机不太可能安装 Arial;Helvetica 更有可能。

于 2011-01-25T11:00:23.823 回答