Можно использовать ofstream для печати на принтере - PullRequest
7 голосов
/ 01 июля 2011

Может ли ofstream использоваться для записи на принтере?

Например:

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

Если я сделаю, как указано выше, я получу вывод на принтер (вкл.бумага) ?

Если нет, то почему я не получу вывод?Пожалуйста, предложите способ печати с использованием принтера.

Я нацеливаюсь на платформу Windows (32 бита)

Ответы [ 3 ]

4 голосов
/ 01 июля 2011

Если ваш принтер связан с 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.И этот файл уже управляется окнами.

См. зарезервированные имена файлов

3 голосов
/ 01 июля 2011

Да, вы можете, Ваш код должен быть:

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

Я считаю, что он чувствителен к регистру (не уверен, что "lpt1" или "LPT1"). Также вам нужно написать команду удаления страницы.

EDIT:
LPT (Line Print Terminal) - это имя интерфейса параллельного порта на IBM-совместимых компьютерах. За прошедшие годы интерфейс параллельного порта сократил использование из-за роста универсальной последовательной шины.

В DOS доступ к параллельным портам можно получить непосредственно из командной строки. Например, команда type c:\autoexec.bat > LPT1 перенаправит содержимое файла autoexec.bat в порт принтера (распознается зарезервированным словом LPT1 "). Устройство PRN также было доступно в качестве псевдонима для LPT1.

Microsoft Windows по-прежнему относится к портам таким образом во многих случаях, хотя это часто довольно скрыто.

В операционной системе Linux первый порт LPT доступен через файловую систему как /dev/lp0.

Для записи на принтер нужно просто открыть принтер , как если бы это был файл (имя принтера зависит от системы; на компьютерах с Windows это будет lpt1 или prn , в то время как на Unix-машинах это будет что-то вроде /dev/lp), тогда пишите любой текст, который должен быть написан.

Пример программы может быть таким простым:

std::ofstream print; 
print.open("LPT1");
if (!print)
    return 0;
print << data;
print.close();
2 голосов
/ 01 июля 2011

Как поток file узнает разницу между именем принтера и файлом, у которого только что произошло имя принтера? Так что нет; Вы не можете печатать на принтере, указав имя принтера.

Печать в Win32 не является тривиальной задачей. Вы не можете просто засунуть некоторые символы в принтер; он должен знать о макете страницы, шрифтах и ​​т. д. По сути, способ сделать это из Win32 - это «нарисовать» принтер с помощью команд GDI. Информация уровня начинающего может быть найдена здесь .


Исправление: по-видимому, вы можете передавать поток на принтер с помощью потока. Однако для этого требуется, чтобы пользователь включил некоторые устаревшие функции, поэтому он не всегда доступен.

...