可以使用流可以在打印机上打印

时间:2011-07-01 08:55:26

标签: c++ visual-c++ printing printers

可以ofstream用于在打印机上书写吗?

例如:

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

如果我这样做,我会通过打印机(在纸上)获得输出吗?

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

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

3 个答案:

答案 0 :(得分: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管理。

参见reserved filenames

答案 1 :(得分:3)

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

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

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

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

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

在许多情况下,

Microsoft Windows仍以这种方式引用端口,尽管这通常是相当隐蔽的。

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

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

示例程序可以简单如下:

std::ofstream print; 
print.open("LPT1");
if (!print)
    return 0;
print << data;
print.close();

答案 2 :(得分:2)

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

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


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