Войти

Показать полную графическую версию : [решено] печать txt файла


Loki3D
17-04-2009, 12:01
нужно решить задачу печати файла в DOS кодировке на принтер.
на печать файл отправляется через
Copy %File% LPT1

в первой строке у файла идет ESC последовательность для принтера, но проблема состоит в том, что Длинные строчки не переносятся, а просто обрезаются при печати. Уменьшение размера шрифта через ESC последовательность тоже уже дошло до разумного предела.

использовать для печати Notepad /P %File% не вариант.

Может ктото разбирается в ESC последовательностях для принтеров HP или знает удобную программу для консольной печати?

alexvav
22-04-2009, 12:36
т.е. текстовый файл в дос-кодировке надо отправить на печать на лазерный принтер?

Loki3D
22-04-2009, 12:38
если быть точнее, то как отправить файл на печать Так, чтобы длинные строки переносились, а не обрезались.

alexvav
22-04-2009, 14:43
прога была DOSPRN кажеться. поищи, если найду выложу.

п.с.
а не проще сразу TXT нормальный делать?

Loki3D
22-04-2009, 14:46
Уважаемый, проблема не в выводе на печать в DOS-WIN кодировке, а в Печати на принтер через консоль.
На сколько я помню DosPrint не умеет работать через командную строку.

amel27
23-04-2009, 13:37
Loki3D, ESC - это Epson, HP - это PCL... допустим последнее, 20cpi достаточно?
E(s20H&l1O&l16D
1234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901 2346789012346789012346789012346789012346789012346789012346789012346789012346789012346789012346789012 34678901234678901234678901
Тестирование принтера. Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тести

FYI: Controlling a HP Printer Directly with PCL (http://www.dragon-it.co.uk/links/hp_pcl_codes.htm)

Loki3D
23-04-2009, 13:52
amel27,
все равно задача не решается.
Даже при альбомной ориентации листа, которая задается командой &l1O, строка обрезается. Обрезается потому, что очень длинная, а мельчить с размером шрифта уже некуда.

и да. у HP это называется PCL команды. А распространенное называние ESC (Эскейп) еще от того, что перед командой вызывается нажатие клавиши Esc ASCII код 27. ну это так. :)

amel27
24-04-2009, 03:12
Даже при альбомной ориентации листа, которая задается командой &l1O, строка обрезается »о какой длине строки речь?.. кста у меня тоже альбом стоял, а HP 9050 взял 24 cpi - 261 символ против 226 при 20 cpi
{Esc}E Сброс
{Esc}(s24H 24 cpi
{Esc}&l1O Альбом
{Esc}&l16D 16 lpi

Loki3D
24-04-2009, 09:33
длина строки в txt файле
в реальном файле она составляет 305 символов.

но вот для примера, чтобы было понятно чего я хочу добиться приведу такую строку
123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
вот тут 310 символов

если печатать в албомной ориентации с размером шрифта 20cpi то влезет 226 символов
при портретной ориентации влезает 160. всё остальное просто обрезается.

Если печатать из notepad то на выходе я получаю всю строку целиком, за счет того, что проиходит перенос.

Вот я и интересуюсь, Есть ли какая то команда для принтера, которая заставит его перенести остальные символы в строке на новую, вместо того чтобы их просто не печатать.

я просмотрел команды в справочнике по PCL 5, разное перепробовал, но желаемого не добился.
Вот думаю,либо я чтото упустил, либо это впринципе не возможно при использовании ESC последовательности.

Печатать надо обязательно портретно и не Очень мелко.

Baw17
24-04-2009, 10:18
а если печатать при помощи Dosprn
http://russian.dosprn.com/

Loki3D
24-04-2009, 10:30
Baw17, если не ошибаюсь DosPrint не работает консольно

Baw17
24-04-2009, 10:36
DosPrint »
это не DOSprn

Loki3D
24-04-2009, 10:54
Baw17, точно.. , но я имел ввиду DOSPRN

amel27
24-04-2009, 11:00
Есть ли какая то команда для принтера, которая заставит его перенести остальные символы в строке на новую, вместо того чтобы их просто не печатать »
Ну это скорее глобальные настройки принтера, чем PCL (который форматирует потоково). У Lexmark была опция Auto CRLF, у HP такого не припомню. Лобовой ход - расставить CRLF по тексту где надо, либо сваять прогу-фильтр, которая будет вставлять в процессе печати типа:
TYPE FILE.TXT|AutoCRLF 160 >PRN

amel27
25-04-2009, 11:28
продолжая ход мысли... Сваять прогу-фильтр несложно, но тогда возникнет другая проблема: если файл содержит PCL-команды, форматирование текста нарушится, а именно - длина строки будет короче на длину PCL-команды. Учет в проге всех PCL-команд довольно муторное занятие, поэтому лучше посылать PCL-команды отдельно от файла.

прилагаю свой вариант такой утилиты... я не программер, пусть спецы поправят если что... =)
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
int i, ch, ln=80;
if(argc == 2) ln = atoi(argv[1]);

while( true )
{
for( i=0; (i < ln) ; i++ ) {
ch = _fgetchar();
if (ch == EOF || ch == 10) break;
_fputchar(ch);
}
if (ch == EOF) break;
_fputchar(10);
}

return 0;
}пример использования:
<%FILE% AutoCRLF 60 >LPT1

P.S. бинарник собран в Microsoft Visual C++ 2008 Express

Loki3D
12-05-2009, 16:35
amel27,
Да, в итоге написал программу




© OSzone.net 2001-2012