Печатайте шрифтом Arial или любым другим шрифтом, отправляя необработанные данные на принтер - PullRequest
1 голос
/ 25 января 2011
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();
  }

Я использовал функцию кода выше для отправки необработанных данных на мой принтер EPSON TM88III с поддержкой ESC / POS.

У меня только 3 отправленных шрифтов по умолчанию на принтере. Но я не хочу печатать в ARIAL FONT. Как мы можем печатать шрифтом Arial.

Пожалуйста, не предлагайте мне использовать диспетчер очереди печати Windows или драйвер принтера. Я хочу напечатать, отправив необработанные данные.

Как мы можем это сделать?

Кодирование выполняется в C # .NET с использованием Visual Studio 2008.

Ответы [ 4 ]

1 голос
/ 25 января 2011

Технически это возможно, если перевести принтер в графический режим и отправить данные пикселей.Вам нужно будет создать монохромное растровое изображение в вашей программе, классы растрового изображения и графики могут выполнить свою работу.Вы бы использовали Graphics.DrawText со шрифтом, инициализированным с помощью Arial, чтобы получить текст так, как вы этого хотите.Кодирование пикселей растрового изображения в команды принтера - это нетривиальная часть, убедитесь, что у вас есть приличное руководство по программированию для принтера.

В противном случае точно , что делает драйвер принтера.Это будет так же медленно.

0 голосов
/ 25 января 2011

Насколько мне известно, драйвер windows TM88 просто отправляет вывод на печать в виде растрового изображения на принтер, поскольку TM88 изначально не поддерживает ничего, кроме текста фиксированной ширины, штрих-кодов и растровых изображений.

Вы можете использовать escape-коды для переключения между шрифтами с засечками и без засечек, но они оба будут фиксированной ширины.

0 голосов
/ 25 января 2011

В зависимости от вашего принтера вы должны использовать другие коды.

Эта запись в википедии на EPSON ESC / P многое объясняет.

Отправка "ESC k 1"(ESC = код 27) к принтеру, помещает его шрифтом Sans Serif.Но я не думаю, что это пропорционально.

Если вы действительно хотите использовать свой собственный шрифт.Вы можете отобразить его (в черно-белом режиме) в объект Image / Bitmap.Переведите принтер в графический режим, а затем распечатайте попиксельно.(На самом деле вы печатаете на 8 или 9 пикселей).

0 голосов
/ 25 января 2011

Этого нельзя сделать.Необработанный текст обычно печатается с использованием моноширинного шрифта (например, Courier).

Если он нужен только для работы с конкретной моделью вашего принтера, вы можете попробовать использовать Postscript, но маловероятно, что ваш принтербудет установлен Arial;Helvetica более вероятно.

...