Конференция "Прочее" » Печать на матричном принтере
 
  • ПЛОВ © (11.06.08 16:46) [0]
    Как научить Винду понимать что такое рулон бумаги в матричном принтере? К сожалению в драйвере принтера нет настроек, обеспечивающих такой тип печати (без "выплевывания" бумаги), поэтому после выполнения посланного на печать задания он настойчиво пытается размотать весь рулон. Может есть какое средство (программа, код, что нибудь другое), что может решить проблему?
    Принтер установлен как сетевой на компьюере с Win 2003.
  • Правильный_Вася (11.06.08 16:56) [1]
    не посылать в печатаемом документе символ конца страницы ("зеркало венеры")
  • ПЛОВ © (11.06.08 16:59) [2]
    А каким образом это реализовать практически?
  • Anatoly Podgoretsky © (11.06.08 17:00) [3]
    > ПЛОВ  (11.06.2008 16:46:00)  [0]

    Печатать в файл.
  • ПЛОВ © (11.06.08 17:02) [4]

    > Anatoly Podgoretsky ©   (11.06.08 17:00) [3]

    ???

    К сожалению нужно именно на бумагу. И именно на рулонную. Объем информации очень большой, и она содержит в себе не только строки текста, но и графику.
  • MsGuns © (11.06.08 17:03) [5]
    Винда специально не "умеет" печатать в текстовом режиме. Любой принтер в ней описан как лист, на котором РИСУЮТ. Поэтому печатать как в ДОСе или Фаре (который лезет на принтер мимо винды) не выйдет, разве что напрямую через порт.
    Всякие команды (ESC/p или типа того) тоже нужно посылать непосредственно в порт или писать в текстовик для фара.
  • Anatoly Podgoretsky © (11.06.08 17:04) [6]
    > ПЛОВ  (11.06.2008 16:59:02)  [2]

    А я не знаю как ты печатаешь, стандартными средствами Дельфи - AssignFile(F, 'LPT1');
  • Alien1769 © (11.06.08 17:05) [7]

    > К сожалению нужно именно на бумагу.

    Ты не понял открой файл с именем PRN и вперед пока бумага/рулон/  есть
  • MsGuns © (11.06.08 17:05) [8]
    >Anatoly Podgoretsky ©   (11.06.08 17:04) [6]
    >А я не знаю как ты печатаешь, стандартными средствами Дельфи - AssignFile(F, 'LPT1'

    Этого недостаточно - будут вместо символов печататься квадратики
  • @!!ex © (11.06.08 17:06) [9]
    > [8] MsGuns ©   (11.06.08 17:05)

    Можно поподробне??
  • ПЛОВ © (11.06.08 17:07) [10]

    > AssignFile(F, 'LPT1');

    Это будет работать как построчная печать текста?
  • ПЛОВ © (11.06.08 17:13) [11]

    > MsGuns ©   (11.06.08 17:05) [8]

    Может есть пример какой чтобы без квадратиков? :)

    Я вообщем-то нашел в Сети какой-то код для построчной печати (и помню как-то давненько весьма успешно его использовал на Вин 98 совместно советским матричным монстром формата А3), но ни на ХР, ни на 2003 код не работает :(
  • MsGuns © (11.06.08 17:20) [12]
    >@!!ex ©   (11.06.08 17:06) [9]
    >Можно поподробне??

    Большинство матричных принтеров понимают только "досовскую" кодировку.
  • Renegat (11.06.08 17:20) [13]
    это потому что код, видимо, напрямую выводит данные в порт, что в ХРеновине запрещено. Выход один - запускать этот код из-под Ring0, модифицировав GDT через
    \Device\PhysicalMemory

    . Я где-то на форуме приводил урлос на одну интересную статейку...
  • Renegat (11.06.08 17:21) [14]
    в смысле, я про то что
    > ни на ХР, ни на 2003 код не работает :(
  • ПЛОВ © (11.06.08 17:32) [15]

    > Большинство матричных принтеров понимают только "досовскую"
    > кодировку

    Т.е. будет достаточно перевести текст в такую кодировку?


    > Renegat

    Нет, код работает с клоном TPrintera. Никаких Ring0 там нету :)
  • Anatoly Podgoretsky © (11.06.08 18:42) [16]
    > MsGuns  (11.06.2008 17:05:08)  [8]

    Ну так файл должен быть в соответствующей кодировке, поддерживаемый принтером. Обычно 866
  • Anatoly Podgoretsky © (11.06.08 18:43) [17]
    > ПЛОВ  (11.06.2008 17:07:10)  [10]

    Это будет работать как поток байт на порт.
  • @!!ex © (11.06.08 18:49) [18]
    У меня есть юнит, который умеет читать и писать на LPT. Могу дать, если надо.
  • ПЛОВ © (11.06.08 21:43) [19]
    Разобрался. Чего-то типа такого работает, правда еще осталось разобратся с кирилицей :)

    var
     F : TextFile;
    begin
     AssignFile(F,'LPT1');
     Rewrite(F);
     Writeln(F,'Hello');
     //Writeln(F,#12); // выброс бумаги
     CloseFile(F);
    end;

  • MsGuns © (11.06.08 22:20) [20]
    >Anatoly Podgoretsky ©   (11.06.08 18:42) [16]
    >Ну так файл должен быть в соответствующей кодировке, поддерживаемый >принтером. Обычно 866

    Ну да. Только вот как мне "заставить" при выгрузке в текстовый файл, например, из мемо, переключить страницу 1251 на cp866 ?
  • Anatoly Podgoretsky © (11.06.08 22:56) [21]
    > MsGuns  (11.06.2008 22:20:20)  [20]

    Зачем переключать, а CharToOem для чего тогда
  • Anatoly Podgoretsky © (11.06.08 22:58) [22]
    > ПЛОВ  (11.06.2008 21:43:19)  [19]

    Смотри предыдущее сообщение.
    А работать просто обязано, здесь же подсистема печати не используется, простой вывод в файл с именем 'LPT1' as is
  • Германн © (12.06.08 00:28) [23]
    Почти оффтоп, но не совсем.
    Сколько я усилий затратил 9 лет назад, чтобы QR печатал наряды для пожарной охраны одного из Ижевских военных заводов на рулоне
    > без "выплевывания" бумаги
  • ПЛОВ © (12.06.08 11:19) [24]

    > Зачем переключать, а CharToOem для чего тогда

    Мне оно не помогло - вместо кириллицы печатается каша из латиницы и спецсимволов. Но зато какие-то символы способны включать курсив, полужирный шрифт и т.п.

    У меня еще вот такой вопрос возник - можно ли каким-то образом "объяснить" принтеру что поток данных не нужно преобразововать в текстовые символы, а печатать как "кусок" изображения? Как бы та же построчная печать, только фрагментов изображения, или это я уже лихо загнул? :)
    Было бы как раз то что нужно - я и сам смог бы нарисовать все нужные и не нужные символы, и вообще все что только угодно. И вопроса с кодовыми страницами бы не возникло...
  • MsGuns © (12.06.08 12:08) [25]
    >ПЛОВ ©   (12.06.08 11:19) [24]
    >Мне оно не помогло - вместо кириллицы печатается каша из латиницы и спецсимволов.

    Чем (какой программой) печатаешь ?

    >Но зато какие-то символы способны включать курсив, полужирный шрифт и т.п.
    >У меня еще вот такой вопрос возник - можно ли каким-то образом >"объяснить" >принтеру что поток данных не нужно преобразововать в текстовые >символы, а печатать как "кусок" изображения? Как бы та же построчная печать, >только фрагментов изображения, или это я уже лихо загнул? :)

    При выводе на матричный принтер "нарямую" графики в понимании винды нет. Все надо самому посредством вставки в отправляемые на принтер (порт) строки esc-последовательности, которые достаточно подробно описаны в доке к принтеру (т.н. система команд Esc/p, которая понимаема большинством принтеров, в т.ч. не Эпсон, хотя есть исключения, насколько помню в старовских и микролай-принтерах, у которых есть свои системы команд). Т.е. схема примерно такова:

    <Esc-команды для установки режимов печати текста><Текст1>,
    <Esc-команды для установки режимов печати текста><Текст>,
     ...
    <Esc-команды для установки режимов графики>,<Графика,заданная с помощью двоичных кодов-байтов >
     ...

    При этом нужно помнить, что перевод каретки, прогон листа и т.д. принтером автоматически не делается (если не было установлено ранее теми же Esc-командами) - все нужно "ручками". Другими словами, принтер воспринимает входные данных просто как бесконечную последовательность байтов, часть из которых он распознает как Esc-команды, а часть печатает.

    Перемешивать текст и графику весьма сложно и без крайней нужды не советую.

    >И вопроса с кодовыми страницами бы не возникло...

    Его не может не возникать, т.к. большинство матричных принтеров ничего не знают про кодовые страницы винды, у них собственные таблицы, "зашитые" производителем в ПЗУ либо загружаемые программно теми же Esc-последовательностями.
    Для "нормальной" печати текста следует сам текст из кодировки w1251 переводить в cp866 (для русской раскладки), и только после этого посылать символы (строки) в порт принтера.
  • ПЛОВ © (12.06.08 12:10) [26]
    Спасибо! Нашел целый воз инфы, в том числе по командам и даже с примерами. Буду копать дальше...
  • MsGuns © (12.06.08 12:25) [27]
    Вот сейчас вспомнил, что Стар вроде полностью эпсон-совместимый. А вот микролайны (были такие дешевые широкие принтеры, кстати весьма неплохие) - там точно что-то было свое ;)
  • ПЛОВ © (12.06.08 12:35) [28]
    У меня Панасоник. Думаю он тоже совместимый )
  • AndreyV © (12.06.08 12:38) [29]
    > [27] MsGuns ©   (12.06.08 12:25)
    > А вот микролайны (были такие дешевые широкие принтеры, кстати
    > весьма неплохие) - там точно что-то было свое ;)

    Вроде переключатель был IBM/Epson.
  • VICTOR_ (12.06.08 12:44) [30]
    С кириллицей может помочь - перед печатью каждой формы использовать последовательность символов (в шестнадцатиричном представлении)
    1B 74 11
    То есть данную последовательность символов надо посылать перед печатью всего остального.

    Просьба также уточнить модель принтера. Возможно нужно просто обновить драйвер через интернет - и в нем будет поддержка рулонной печати.
    Работал с чековым (матричным принтером) Epson TM-U220D
    Там из Windows печатало без прогона рулона
    Еще хорошая вещь - принтеры EPSON TM-88 и совместимые с ними (чековые)

    Еще одно замечание - при работе чековыми принтерами и печати из под Windows используйте только LPT - модели, а не USB и тем более не COM. Скорость печати отличается в разы.
  • ПЛОВ © (12.06.08 12:53) [31]

    > 1B 74 11

    Было бы интересно узнать что это за команды?
  • Alien1769 © (12.06.08 12:55) [32]

    >
    > > 1B 74 11
    >
    > Было бы интересно узнать что это за команды?

    Esc последовательность перевода печати в альтернативную кодировку
  • Anatoly Podgoretsky © (12.06.08 13:22) [33]
    > ПЛОВ  (12.06.2008 11:19:24)  [24]

    Так это, а какой у тебя шрифт(язык) установлен в принтере по умолчанию. Проверь вот это.
  • Anatoly Podgoretsky © (12.06.08 13:25) [34]
    > MsGuns  (12.06.2008 12:25:27)  [27]

    Зато сейчас они пишут, мол система команд совместима с Epson - именно так, без указания модели, поскольку сами эпсоны не совместимы и выбрать драйвер в Виндоус это проблема, нет драйвера Epson
  • Anatoly Podgoretsky © (12.06.08 13:26) [35]
    > AndreyV  (12.06.2008 12:38:29)  [29]

    Был, но при этом не понимал ряд команд, скажем в режиме Epson, но при этом почему то понимал не существующие для эпсон команды IBM
  • Anatoly Podgoretsky © (12.06.08 13:27) [36]
    > VICTOR_  (12.06.2008 12:44:30)  [30]

    > используйте только LPT - модели, а не USB

    Какой то у тебя печальный опыт.
  • VICTOR_ (12.06.08 13:48) [37]

    > Какой то у тебя печальный опыт.
    >

    Возможна проблема была в драйвере, потому что насколько я понял - печать через USB эмулировалась как печать через COM. Использовалась модель, совместимая EPSON TM-88.
    Пересмотрел все варианты этой модели (COM, USB, LPT)  и на основании собственного опыта пришел к такому выводу. Имеется ввиду именно печать через Windows-драйвер.
    P.S. А многие производители материнских плат уже не комплектуют их LPT-портом :(
  • AndreyV © (12.06.08 13:51) [38]
    Вот на перфорированной бумаге, в соответсвующем режиме, прокрутка идёт только до конца страницы.
    Может посмотреть на принтере переключатели какие-нибудь.
  • Anatoly Podgoretsky © (12.06.08 14:11) [39]
    > VICTOR_  (12.06.2008 13:48:37)  [37]

    Ну так и надо жаловаться на СОМ а не на USB, у USB2 скорость может достигать 60мб/сек, LPT даже самые скоростные так не могут. Это же половина скорости 1 гигабита.
  • VICTOR_ (12.06.08 14:26) [40]

    > Ну так и надо жаловаться на СОМ а не на USB, у USB2 скорость
    > может достигать 60мб/сек, LPT даже самые скоростные так
    > не могут. Это же половина скорости 1 гигабита.

    Согласен, неправильно сформулировал замечание.
    Переформулирую так

    При работе с чековыми принтерами и печати из под Windows (через Windows-драйвер) будьте внимательны при выборе USB или LPT - моделей. Вследствии реализации драйвера (либо самой модели принтера) разница в скорости печати может достигать несколько раз. Причем как в сторону LPT так и в сторону USB. COM - модели принтеров в данном случае не рекомендуется использовать, так как скорость печати через Windows-драйвер очень низкая.
  • MsGuns © (12.06.08 16:24) [41]
    >AndreyV ©   (12.06.08 13:51) [38]
    >Вот на перфорированной бумаге, в соответсвующем режиме, прокрутка идёт только до конца страницы.

    Понятие "конец страницы" для подавляющего большинства МП это всего лишь сброс счетчика строк, установленного по умолчанию (в ПЗУ или переключателями) или программно. При этом ему пофиг пробивка листовой бумаги. Пробивку они понимают, но только в плане печатать на ней лил пропускать. Правда для рулонной бумаги такой проблемы нет конечно.

    Был один принтер (не помню марки, но здоровенный такой), у которого была классная команда - "прогон до пробивки". Беда всего этого в том, что невозможно программно установить где именно (в какой части листа) заправлена (установлена) бумага перед началом печати и полагаться приходится только на оператора, подгоняющего границу листа вручную.

    Еще одна проблема - это "проскальзывание" бумаги по валикам или, наоборот, задержка (например из-за излишне сильного натяга от рулона или податчика бумаги) - в этом случае печать "сбивается" и происходит смещение, что приводит к тому, что инормация листов перелазит на следующий лист бумаги. Это все, ессно, о листовой бумаге. Проблема не слишком актуальная при наличии перфорации у бумаги и соответствующего механизма подачи у принтера. Если же нет того или друго, то печать больших объемов требует постоянного надзора с приостановом и подгоном бумаги вручную. В общем штука гадкая, но, к сожалению, никак программно не боримая.

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

    Т.е. с матричными принтерами мороки, конечно же, куда больше. И оправдывает их лишь то, что экономия на одной только бумаге весьма солидная. Во всем остальном ЛП предпочтительнее.
  • Anatoly Podgoretsky © (12.06.08 16:59) [42]
    > MsGuns  (12.06.2008 16:24:41)  [41]

    Большинство принтеров имею функцию загрузка бумаги и человек для определения начала листа как бы лишний.
    Рулонная печать подразумевает печать на перфорированой бумаге, а остальное это хакерские методы.
  • AndreyV © (12.06.08 17:18) [43]
    > [41] MsGuns ©   (12.06.08 16:24)

    Я имел ввиду, в первую очередь, боковую перфорацию и соответствующий механизм принтера (трактор). При заправке принтер/оператор протягивает ленту на начало листа (до пробивки). Проскальзывания там не бывает, разве что застрянет и порвётся сама перфорация.

    Бумага продаётся в коробках сложенная гармошкой формата А3 и А4, длинной 600 и 1200 метров (3000 и 6000 листов), вот цена, по-моему, не намного меньше, чем для лазерников. Могу ошибаться, давно не имел дела, только вот дома в столе лежит кусок гармошки для почеркушек.

    Это к тому, что автору может лучше купить такой бумаги и не маяться.
  • AndreyV © (12.06.08 17:25) [44]
    > [41] MsGuns ©   (12.06.08 16:24)
    > Понятие "конец страницы" для подавляющего большинства МП
    > это всего лишь сброс счетчика строк

    Ну это так.
    И количество листов посчитал неправильно 2000 и 4000 при высоте листа 30см.
  • MsGuns © (12.06.08 20:34) [45]
    >Anatoly Podgoretsky ©   (12.06.08 16:59) [42]
    >AndreyV ©   (12.06.08 17:18) [43]

    Ведя речь о механических  "погрешностях" "трактора" я имел в виду бумагу без перфорации.
    Термин "перфорация" применим исключительно к боковым "дыркам", а не к тому, что разделяет листовую бумагу (в рулонной, насколько я знаю, ее нет),- оно называется "пробивка" (или "просечка"), во всяком случае в документации к LX-1050 (на "родном" не помню как называется)
  • Anatoly Podgoretsky © (12.06.08 20:42) [46]
    > MsGuns  (12.06.2008 20:34:45)  [45]

    Бумага без перфорации - это профанация, никто не гарантирует никакой точности и официально ее как бы нет. Но существуют хакерские решения, разработаные от бедности, наверно видел это в давние времена на больших ЭВМ, ее и резали на самодельных станках, а для протяжки пупырышки меняли на иголки, чтобы обеспечить надежный захват. Промышленно это не делается.

    Я участвовал в этом гнусном деле :-)

    Рулонная бумага используется в типографиях.

    А то про что ты говоришь, называется линия разрыва.
  • MsGuns © (12.06.08 23:54) [47]
    >А то про что ты говоришь, называется линия разрыва.

    Анатолий, подними рук-во по Epson LX-1050 и почитай. Там ясно написано "просечка". Ну вот землю буду есть ;)

    "Линией разрыва" называют пропечатанную точками или минусиками черту, которую обычно используют для удобства порезки (например, при  печати платежек или расчеток по з/пл)  рулонной бумаги
  • Anatoly Podgoretsky © (13.06.08 00:10) [48]
    > MsGuns  (12.06.2008 23:54:47)  [47]

    Да не существенно как называть.
  • Prohodil Mimo © (13.06.08 01:03) [49]
    ПЛОВ ©   (11.06.08 16:46)
    тут смотрел?
    http://sovety.net/010700.php
  • Red_imp © (13.06.08 10:44) [50]
    У меня работает вот это

    procedure TForm1.BitBtn3Click(Sender: TObject);
    Var diDocInfo : TDocInfo1;
       PrnHandle:THandle;
       dwTmp:DWORD;
       st:string;
       i:integer  ;
    begin
     if not OpenPrinter('Epson LX-400',PrnHandle,NIL) Then begin
       ShowMessage('Ошибка печати '+IntToStr(GetLastError));
       Exit;                  
     end;
     with diDocInfo do begin
       pDocName:='';
       pOutputFile:=nil;
       pDataType:='RAW';
     end;
     StartDocPrinter(PrnHandle, 1, @diDocInfo);
     StartPagePrinter(PrnHandle);
    for i := 0 to  RichEdit1.lines.Count-1 do
     begin
     st:=RichEdit1.lines.Strings[i];
     if st<>'' then CharToOem(Pchar(st),Pchar(st))
     else  st:='';
     WritePrinter(PrnHandle,PChar(st+#10#13),Length(st)+2,dwTmp); //построчная печать файла
     end;
     EndPagePrinter(PrnHandle);
     EndDocPrinter(PrnHandle);
     ClosePrinter(PrnHandle);
    end;



    Нормально работает без прогона страниц, под ХР.
  • MsGuns © (13.06.08 13:29) [51]
    И печатает в текстовом режиме ?
  • Nic © (13.06.08 14:47) [52]

    > Red_imp ©   (13.06.08 10:44) [50]

    А вот интересно, рисование графического фаайла на длинной рулонной бумаге можно также сделать?
  • MsGuns © (13.06.08 17:37) [53]
    А как по-вашему печатаются транспаранты ?
  • ПЛОВ © (15.06.08 13:23) [54]

    > С кириллицей может помочь - перед печатью каждой формы использовать
    > последовательность символов (в шестнадцатиричном представлении)
    > 1B 74 11

    Не помогло. Стали печататся греческие символы :)
    Что же реально делать с кириллицей?
  • Anatoly Podgoretsky © (15.06.08 14:06) [55]
    > ПЛОВ  (15.06.2008 13:23:54)  [54]

    То что сказали ранее, перевести принтер *программно или через меню принтера) в режим работы с одной из нужных кодовых таблиц, на принтер подавать тексты в этой кодировке. А насчет кодов не слушая, они разные, а реальные надо узнавать из документации на принтер.
  • MsGuns © (15.06.08 19:43) [56]
    >ПЛОВ ©   (15.06.08 13:23) [54]
    >> С кириллицей может помочь - перед печатью каждой формы использовать
    >> последовательность символов (в шестнадцатиричном представлении)
    >> 1B 74 11

    >Не помогло. Стали печататся греческие символы :)

    Это шаманский способ. Помогает только если Меркурий в Стрельцах, а луна в полуфазе.
  • Юрий Зотов © (15.06.08 20:46) [57]
    Насколько помню, печатать в текстовом режиме (в кодировке ASCII) винда все же умеет (надо установить драйвер Generic/Text Only). А чтобы печатать на рулоне, из текста надо убрать символы #12 (FF - Format Feed).
  • VirEx © (15.06.08 21:54) [58]
    случайно нарыл такую штуку, может найдешь там про эскпоследовательности:

    http://ihtik.lib.ru/dedic_natahaus_17yanv2008.html

    З.Ы. есть такая штука "243. Windows 2000 Native API reference 1999.pdf"
  • AndreyV © (16.06.08 08:20) [59]
    > [57] Юрий Зотов ©   (15.06.08 20:46)

    В конце задания будет добавлен прогон страницы.

    Автору. Какая бумага в рулоне?
  • Prohodil Mimo © (16.06.08 12:48) [60]
    ПЛОВ ©   (15.06.08 13:23) [54]
    Что же реально делать с кириллицей?

    1. почитать повнимательней по ссылке в [49]
    или
    2. перед печатью грузить в принтер русские шрифты, т.к. он у тебя скорее всего не прошит кирилицей. Во времена доса были спец драйвера для клавиатуры, для монитора, а так же для принтера (на случай, если не застал такое чудо).
 
Конференция "Прочее" » Печать на матричном принтере
Есть новые Нет новых   [134437   +29][b:0][p:0.002]