У меня древний 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();
}
Теперь я хотел бы сделать еще один шаг и отправить задание на печать второму устройству подачи. Первый — рулон бумаги внутри принтера (распечатывает чек). Этот печатает по коду выше. Второй — это щель, которая используется для вставки другой квитанции. Я не знаю, как отправить туда задание на печать.
Как я выяснил, это не проблема программирования, а проблема управления принтером. Чтобы выполнить проверку формы на принтере для чеков / проверок форм 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 напрямую.