【问题标题】:LPT POS printer alternate feedLPT POS 打印机交替进纸
【发布时间】:2014-05-29 15:53:18
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 2020-11-16
      • 2020-04-03
      • 2014-11-16
      • 2012-10-11
      • 1970-01-01
      相关资源
      最近更新 更多