通过将原始数据发送到打印机,以Arial字体或任何其他字体打印

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中完成。     
已邀请:
据我所知,TM88的Windows驱动程序只是将打印输出作为位图发送到打印机,因为TM88本身不支持除固定宽度文本,条形码和位图之外的任何内容。 您可以使用转义码在serif和sans-serif字体之间切换,但它们都是固定宽度的。     
通过将打印机置于图形模式并发送像素数据,这在技术上是可行的。您必须在程序中创建单色位图,Bitmap和Graphics类可以完成工作。您将Graphics.DrawText与使用Arial初始化的Font一起使用,以便按照您希望的方式获取文本。将位图像素编码到打印机命令中是非常重要的部分,请务必为打印机提供合适的编程手册。 这正是打印机驱动程序所做的。它会一样慢。     
那是不可能做到的。按照惯例,原始文本使用等宽字体(例如Courier)打印。 如果您只需要它来使用您的特定打印机型号,您可以尝试使用Postscript,但您的打印机不太可能安装Arial; Helvetica更有可能。     
根据您的打印机,您应该使用其他代码。 EPSON ESC / P上的这个wikipededia条目解释了很多。 将“ESC k 1”(ESC =代码27)发送到打印机,将其置于Sans Serif字体中。但我不认为这是成比例的。 如果你真的想使用自己的字体。您可以将它(黑/白)渲染到Image / Bitmap对象。将打印机置于图形模式,然后逐个像素打印。 (实际上每8或9像素打印一次)。     

要回复问题请先登录注册