7

可以ofstream用来在打印机上写字吗?

例如:

string nameOfPrinter = "xyz";
ofstream onPrinter(nameOfPrinter);
onPrinter << "Printing.... ";

如果我按照上述操作,我会得到打印机的输出(在纸上)吗?

如果没有,为什么我不会得到输出?请建议一种使用打印机打印的方法。

我的目标是 Windows 平台(32 位)

4

3 回答 3

4

如果您碰巧有与 LPT1 关联的打印机和支持换页的打印机。

#include <iostream>
#include <fstream>
using namespace std;

int main ()
{
    ofstream printer ("LPT1");
    if(!printer)
    {  return 1;
    }

    printer.puts("Test Test Test\n");
    printer.putc('\f');
    printer.close();
    return 0;
} 

LPT1 也是 windows 中的文件名。但众所周知,它是一个保留的文件名。所以不可能有多个名为 LPT1 的文件。而且这个文件已经被windows管理了。

查看保留的文件名

于 2011-07-01T09:24:30.387 回答
3

是的,你可以,你的代码应该是:

ofstream printer;
printer.open("lpt1");

我相信它区分大小写(不确定“lpt1”或“LPT1”)。此外,您需要编写一个页面弹出命令。

编辑:
LPT(行打印终端)是IBM PC 兼容计算机上并行端口接口的名称。多年来,由于通用串行总线的兴起,并口接口的使用减少了。

DOS中,可以直接在命令行上访问并行端口。例如,该命令type c:\autoexec.bat > LPT1会将文件的内容定向autoexec.bat到打印机端口(由保留字 LPT1" 识别)。PRN设备也可用作 LPT1 的别名。

Microsoft Windows在许多情况下仍然以这种方式引用端口,尽管这通常是相当隐藏的。

Linux操作系统中,第一个LPT端口可通过文件系统作为/dev/lp0.

要写入打印机,只需像打开文件一样打开打印机(打印机名称取决于系统;在 Windows 机器上,它将是lpt1or prn,而在 unix 机器上,它将类似于/dev/lp),然后写入必须写任何文本。

示例程序可以很简单:

std::ofstream print; 
print.open("LPT1");
if (!print)
    return 0;
print << data;
print.close();
于 2011-07-01T09:10:32.450 回答
2

文件流如何知道打印机名称和刚刚共享打印机名称的文件之间的区别?所以不行; 您不能通过指定打印机的名称来打印到打印机。

在 Win32 中打印并非易事。您不能简单地将一些字符推到打印机上。它需要了解页面布局、字体等。基本上,从 Win32 执行此操作的方法是使用 GDI 命令“绘制”到打印机。初级信息可以在这里找到


更正:显然,您可以使用流将输出流式传输到打印机。但是,它要求用户启用了一些遗留功能,因此它不一定总是可用的。

于 2011-07-01T09:10:26.973 回答