LPT POS принтер альтернативная подача

У меня есть древний POS-принтер Axhiohm A470 LINK. Windows 7 64bit не обнаруживает этот принтер, и драйверы не существуют. Единственный способ печати (только в текстовом режиме) - это отправить задание на печать непосредственно в LPT. После некоторых раскопок я обнаружил, что это довольно легко. Единственное, что вам нужно сделать, это правильно создать файл LPT1 и записать в него.

#include <iostream>
#include <conio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
    HANDLE hComm = CreateFileA("LPT1", GENERIC_READ | GENERIC_WRITE,
                       0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

    if (hComm == INVALID_HANDLE_VALUE)
        return 1;

    char str[] = { "   Hello from your printer\n" };

    DWORD bytesWritten;
    unsigned char data;

    BOOL nError = WriteFile(hComm, str, sizeof(str), &bytesWritten, NULL);

    if (nError)
        std::cout << "Data sent" << std::endl;
    else
        std::cout << "Failed to write data " << GetLastError() << std::endl;

    _getch();
}

Теперь я хотел бы сделать еще один шаг и отправить задание на печать второму устройству подачи. Первый - рулон бумаги внутри принтера (распечатывает чек). Этот печатает по коду выше. Второй - это щель, которая используется для вставки другой квитанции. Я не знаю, как отправить туда задание на печать.

1 ответ

Решение

Как я выяснил, это не проблема программирования, а проблема управления принтером. Чтобы выполнить проверку формы на принтере для чеков / проверок форм Axiohm A470, необходимо отправить соответствующие escape-последовательности. Это ссылка на веб-сайт, где я описал, как проверить форму Печать на чеке POS и чеке. Кроме того, если у вас нет каких-либо полезных драйверов для вашего принтера, и он подключен к порту lpt/com, есть более простой способ отправить задание на печать на этот принтер, чем в моем коде выше. Вам даже не нужно устанавливать универсальные / текстовые драйверы Windo ws. Вот как я отправляю перевод строки на мой принтер:

FILE * pFile;
char buffer[] = { (char)0x0a };
pFile = fopen ("c:\\test.txt", "wb");
fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
fclose (pFile);
system("copy c:\\test.txt lpt1");

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

Другие вопросы по тегам