LPT POS打印机备用送纸器

时间:2014-05-29 15:53:18

标签: c++ printing receipt parallel-port lpt

我有一台古老的POS打印机Axhiohm A470 LINK。 Windows 7 64位无法检测到此打印机,驱动程序也不存在。只有打印方式(仅限文本模式)才能将打印作业直接发送到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 个答案:

答案 0 :(得分:1)

我发现这不是编程问题,而是打印机控制问题。要在Axiohm A470收据/表单验证打印机上完成表单验证,您必须发送适当的转义序列。这是链接到我描述如何验证表单Printing on POS slip and receipt validation printer 的网站。此外,如果您的打印机没有任何有用的驱动程序并且它已连接到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文件。