Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] печать txt файла (http://forum.oszone.net/showthread.php?t=137956)

Loki3D 17-04-2009 12:01 1096587

печать txt файла
 
нужно решить задачу печати файла в DOS кодировке на принтер.
на печать файл отправляется через
Copy %File% LPT1

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

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

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

alexvav 22-04-2009 12:36 1100872

т.е. текстовый файл в дос-кодировке надо отправить на печать на лазерный принтер?

Loki3D 22-04-2009 12:38 1100873

если быть точнее, то как отправить файл на печать Так, чтобы длинные строки переносились, а не обрезались.

alexvav 22-04-2009 14:43 1101002

прога была DOSPRN кажеться. поищи, если найду выложу.

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

Loki3D 22-04-2009 14:46 1101010

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

amel27 23-04-2009 13:37 1102010

Loki3D, ESC - это Epson, HP - это PCL... допустим последнее, 20cpi достаточно?
Код:

E(s20H&l1O&l16D
1234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901234678901
Тестирование принтера. Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тестирование принтера.Тести

FYI: Controlling a HP Printer Directly with PCL

Loki3D 23-04-2009 13:52 1102025

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

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

amel27 24-04-2009 03:12 1102604

Цитата:

Цитата Loki3D
Даже при альбомной ориентации листа, которая задается командой &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 1102698

длина строки в 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 1102733

а если печатать при помощи Dosprn
http://russian.dosprn.com/

Loki3D 24-04-2009 10:30 1102747

Baw17, если не ошибаюсь DosPrint не работает консольно

Baw17 24-04-2009 10:36 1102754

Цитата:

Цитата Loki3D
DosPrint »

это не DOSprn

Loki3D 24-04-2009 10:54 1102763

Baw17, точно.. , но я имел ввиду DOSPRN

amel27 24-04-2009 11:00 1102770

Цитата:

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

Ну это скорее глобальные настройки принтера, чем PCL (который форматирует потоково). У Lexmark была опция Auto CRLF, у HP такого не припомню. Лобовой ход - расставить CRLF по тексту где надо, либо сваять прогу-фильтр, которая будет вставлять в процессе печати типа:
Код:

TYPE FILE.TXT|AutoCRLF 160 >PRN

amel27 25-04-2009 11:28 1103718

Вложений: 1
продолжая ход мысли... Сваять прогу-фильтр несложно, но тогда возникнет другая проблема: если файл содержит 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 1116512

amel27,
Да, в итоге написал программу


Время: 02:25.

Время: 02:25.
© OSzone.net 2001-