Печать в матричном многоточии (параллельный порт) поверх C # - PullRequest
4 голосов
/ 26 января 2010

Для нужд проекта, я хочу распечатать на LPT1 в определенных местах, это напечатает документ на матричном принтере, где я должен напечатать значения в местах, куда они должны идти. Я действительно ненавижу возвращаться, и я понятия не имею, с чего начать. В Интернете нет конкретной информации о печати через LPT-порт с помощью C # и особенно о том, как отправлять значения в определенные места во время печати. Есть ли хороший пример? учебник для этого? будет спасителем жизни.

Ответы [ 4 ]

5 голосов
/ 26 января 2010

Я мог бы предложить одну вещь, которая облегчит вашу жизнь, установите универсальный драйвер текстового принтера (он входит в стандартную комплектацию) и установите его для порта LPT1. Затем вы можете просто открыть «LPT1» и отправить escape-код последовательности, чтобы указать тип шрифта (полужирный / курсив), выделенный, шаг шрифта и т. Д. Я не знаю, потребуются ли ресурсы. Но я думаю, это будет примерно так:

System.IO.StreamWriter sr = new System.IO.StreamWriter(@"\\.\LPT1");
sr.Write(0x1b); sr.Write('k'); sr.Write('1'); sr.Write("Hello"); // print in Sans Serif
sr.WriteLine();
sr.Flush();
sr.Close();

Ресурсы:

  • Печать на принтере Zebra с использованием VB.NET (это можно легко перевести на C # или скомпилировать в DLL и ссылаться на него в вашем проекте C #)
  • Статья о MSDN о том, как взаимодействовать с LPT1
  • Вот обширный список информации, относящейся к Параллельный порт . (смотрите далее в разделе «Инструменты программирования для ввода-вывода портов и прерываний»), где обсуждается использование этой DLL-библиотеки inpout32.
  • Вот еще одна статья на MSDN , в которой показано, как выполнять необработанную печать.

Отредактировано @ 2017-07-12: обновлена ​​ссылка на параллельный порт для использования Wayback Archive Machine.

3 голосов
/ 26 января 2010

Разве у рассматриваемого принтера нет драйвера печати для Windows? Если это так, то не имеет значения, печатает ли он по LPT1 или нет, он просто использует стандартный материал Print.

Аналогичный вопрос: Матричная печать на C #?

1 голос
/ 26 января 2010

Если на вашем принтере установлены драйверы для Windows, вы можете использовать стандартные методы печати. См. Книгу Петцольда Программирование Microsoft Windows с C # для хорошего вступления.

0 голосов
/ 21 мая 2019

Эй, я только что получил матричный принтер в 2019 году, и вы все еще можете купить ленты за £ 5.

using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

public class ParallelPrinter
{
    [DllImport("kernel32.dll", SetLastError = true)]
    static extern SafeFileHandle CreateFile(string lpFileName, FileAccess dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);

    public static void Print(string text)
    {
        using (SafeFileHandle fileHandle = CreateFile("LPT1:", FileAccess.Write, 0, IntPtr.Zero, FileMode.OpenOrCreate, 0, IntPtr.Zero))
        {
            if (fileHandle.IsInvalid == true)
                throw new ApplicationException("Printer is Invalid");

            using (FileStream stream = new FileStream(fileHandle, FileAccess.Write))
            {
                using (StreamWriter writer = new StreamWriter(stream, Encoding.ASCII))
                {
                    writer.Write(text);
                }
            }
        }
    }
}

Нет драйверов, вам просто нужен параллельный порт, вы можете получить карту PCI-e, если у вас ее нет.

...