Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Текстовый поток на принтер


Автор: ИгнатьевАлексей 5.9.2006, 10:53
Господа!
Есть у меня закрытая служебная программка, которая отправляет текстовые строки на матричный принтер. Принтер сломался и есть острая необходимость сохранять эти данные в текстовом файле, например. Подскажите, как это возможно сделать, т.е. может программки кикие-нибудь есть, или самому программировать надобно? 
Прошу прощения, если в  smile  попал.
Заранее благодарен!

Автор: Snowy 5.9.2006, 10:59
В настройках принтера выбрать "Печатать в файл".

Автор: ИгнатьевАлексей 5.9.2006, 12:13
Спавибо! А ты не мог бы подсказать, где в настройках принтера это сидит?.....  У меня XP, и мне что-то не найти

Автор: Snowy 5.9.2006, 12:23
Открывай свойства принтера.
Закладка "Порты"
Вместо текущего LPT порта, выбери "FILE: Печатать в файл".

Автор: ИгнатьевАлексей 5.9.2006, 12:34
Спасибо! А как теперь с этим файлом работать? Он полон каких то непонятных символов вместо нужного текста

Автор: Snowy 5.9.2006, 13:33
Там коды принтера.
Если непонятные символы, значит у тебя не просто текст, а его графическая интерпритация.
С ней работать может только принтер.
Значит пока откладывай файлы. Как появится принтер или найдётся аналогичный, можно будет эти файлы распечатать.
copy myfile.prn LPT1:
или на принтер по умолчанию:
copy myfile.prn PRN:
читать их невозможно, т.к. это управляющие коды принтера и зависят от драйвера принтера.
Читать их может только принтер этой или совместимой модели.

Автор: ИгнатьевАлексей 5.9.2006, 13:41
Жаль, но мне это не подходит. В том то и задача моя, чтобы без принтера обойтись, а вместо него печатать эти строки в текстовый файл. Причем они автоматически и непрерывно идут на этот принтер.

Автор: Snowy 5.9.2006, 14:40
Если бы это были текстовые строки, то в файл они бы так и падали, как текстовые.
А, раз они падают в кодах, значит текст идёт в графике.
А графику можно максимум скинуть в файлы-картинки - одна страница - один файл.
Для этого нужно ставить эмулятор принтера.

Добавлено @ 14:43 
Да, кстати, наиболее напрашивающийся эмулятор идёт в комплекте с Adobe Acrobat (не reader).
Там даже удобнее - всё, что печатается, превращается в PDF документ.

Добавлено @ 14:46 
А, вспомнил.
Чтобы печатать только текст, есть способ.
Панель управления - принтеры - установить новый
Выбери локальный принтер
Порт выбери FILE:
Модель: Generic / Text Only
Будет тебе чистый текст.

Добавлено @ 14:47 
Щас проверил - эта страница ушла в файл чистым текстом.

Добавлено @ 14:51 
Да, не забудь в настройках принтера выбрать шрифт 1251, а то он по умолчанию европейский ставит.

Автор: ИгнатьевАлексей 5.9.2006, 15:43
Спасибо, но у меня не чистый текст. Пытался напечатать строку из блокнота и получил еще кубики впридачу. Но тем не менее, это уже ближе к моей задачке.
Еще вопросик - а возможно избежать диалогового окна при этом?

Автор: Snowy 5.9.2006, 16:44
Ну абсолютно чистый текст это вряд ли.
Программы пытаются слать ещё всякую муть, акромя него.
Но ведь никто и не говорил, что на выходе будет типографский документ smile

От диалогового окна избавиться никак.
Не заложен в винду механизм автоприсваивания имён файлов smile
Хотя это очевидно напрашивается...

Добавлено @ 16:45 
Цитата(ИгнатьевАлексей @  5.9.2006,  15:43 Найти цитируемый пост)
Пытался напечатать строку из блокнота и получил еще кубики впридачу.
Это не кубики. Это Enter'ы. (CR/LF - #13#10).

Автор: dumb 5.9.2006, 16:51
Цитата(Snowy @  5.9.2006,  16:44 Найти цитируемый пост)
От диалогового окна избавиться никак.

как. smile
заходим в свойства принтера, вкладка Ports. там жмем на кнопку "Добавить порт..." - Local Port, в "имя порта" вводим полное имя файла, куда будет идти печать.

Автор: Snowy 5.9.2006, 16:57
ХМ. Нашёл способ избавиться от запроса имени файла.
Создаём новый порт - TCP/IP, имя localhost.
По дефолту получаем localhost:9100
Настраиваем очередь печати - начинать печатать после помещения в очередь всего задания.
На любом языке программирования пишем элементарный сервер - слушает порт 9100, при коннекте забирает все данные и кидает куда захочешь.
На дельфи я накликал такой за 2 минуты.

Добавлено @ 16:57 
dumb, пока я кликал сервер, да писал ответ, ты уже успел smile

Добавлено @ 17:00 
ЗЫ. Но в таком варианте всё будет сыпаться в один файл.
Через TCP сложнее, но управление именованием файлов - какое пожелаешь...

Автор: ИгнатьевАлексей 5.9.2006, 18:06
Snowy, огромное спасибо! Буду разбираться как твою мысль осуществить!!!

Автор: ИгнатьевАлексей 6.9.2006, 08:31
Snowy, подскажи, пожалуйста. 
В графе Printer Name or IP Address я могу вводить любое имя. Правильно я понял? 
И где теперь просмотреть можно созданный порт? Не могу найти....

Автор: Snowy 6.9.2006, 09:52
Цитата(ИгнатьевАлексей @  6.9.2006,  08:31 Найти цитируемый пост)
В графе Printer Name or IP Address я могу вводить любое имя.
Нет. Там должен быть указан "localhost".

Цитата(ИгнатьевАлексей @  6.9.2006,  08:31 Найти цитируемый пост)
И где теперь просмотреть можно созданный порт?
Там же - на закладке "Порты". Кнопочка "Настроить порт" работает. Можешь там менять IP-адрес и порт, если хочешь.

Автор: ИгнатьевАлексей 6.9.2006, 10:30
Цитата

Там же - на закладке "Порты". Кнопочка "Настроить порт" работает. Можешь там менять IP-адрес и порт, если хочешь. 

А если я в списке доступных портов не вижу созданного порта? Но порт сам создался, т.к. повторно порт с этим именем Винда не дает создать.

Автор: Snowy 6.9.2006, 10:47
Должен быть в списке.
Попробуй закрыть окно и вызвать снова.
Если не получится, создай новый порт - дай ему другое - понятное имя, Имя принтера/IP - localhost.
Вот примерный скрин:
user posted image

Автор: ИгнатьевАлексей 6.9.2006, 11:05
Спасибо! Увидел. 
Самого того принтера у меня сейчас нет и я смотрел в свойствах другого  принтера, не обратив внимание, что он сетевой.   smile 
Еще раз спасибо за исчерпывающую инфу. Буду разбираться с написанием сервера.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)