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

У меня древний POS-принтер Axhiohm A470 ССЫЛКА НА САЙТ. 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, есть более простой способ отправить задание на печать на этот принтер, чем в моем коде выше. Вам даже не нужно устанавливать универсальные / текстовые драйверы Windows. Вот как я отправляю перевод строки на мой принтер:

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 напрямую.

1

Другие решения


По вопросам рекламы [email protected]