1

我有一台古老的 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();
}

现在我想更进一步,将打印作业发送到第二个进纸器。第一个是打印机内的纸卷(打印收据)。这个由上面的代码打印。第二个是用于放入另一张收据的狭缝。我不知道如何在那里发送打印作业。

4

1 回答 1

1

我发现这不是编程问题,而是打印机控制问题。要在 Axiohm A470 收据/表单验证打印机上完成表单验证,您必须发送适当的转义序列。这是我描述如何在 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 文件。

于 2014-07-01T14:03:59.643 回答