Просмотр полной версии : Эмулятор матричного принтера
GARNIZON
29.07.2021, 23:51
Подскажите, какие эмуляторы имеют модуль принтера?
Скажем эмулятора Агата умеет печтатать на совремемнный принтер или в PDF с сохранением форматирования документа.
Шрифты уже современные - высокого разрешения. Это конечно красиво но не тру...
Есть идея сделать некий черный ящик для различных эмуляторов, которому на вход подаётся ESC/P последовательность байт, а на выходе получается картинка распечатки. Эмулировать принтерные иголки... Но это довольно большая задача, такого качества эмуляцию сделать.
Это надо принтерную фирмварю и процессор эмулировать -- тогда всё идеально будет.
Но может быть это все уже где-то есть? подскажите.
Есть идея сделать некий черный ящик для различных эмуляторов, которому на вход подаётся ESC/P последовательность байт, а на выходе получается картинка распечатки. Эмулировать принтерные иголки... Но это довольно большая задача, такого качества эмуляцию сделать.
А вот это не устроит?
https://github.com/nzeemin/ukncbtl-utils/tree/master/ESCParser
Эмуляция команд ESC/P, ближе всего к Robotron CM 6329.01M.
Умеет выдавать PS, SVG (только одна страница) и PDF.
Переносимый код, компилируется под Windows/Linux/Mac.
- - - Updated - - -
Ещё похожие инструменты:
https://github.com/christopherkobayashi/TI99Utilities/tree/master/printer_listener/epsonps
https://github.com/zub2/dotprint
https://github.com/nzeemin/ukncbtl-u...ster/ESCParser
nzeemin, можно пару замечаний, выявленных в процессе использования парсера?
1. Команда ESC S0/S1 - включение режима верхнего или нижнго индекса. Сейчас В качестве параметра, следующего за 'S' воспринимается только 0x00 либо 0x01, в то же время как стандарт esc/p от Epson (https://epson.ru/upload/support/library/esc-p.pdf) говорит, что допустимы также 0x30 и 0x31 ('0' и '1'):
n = 1 or 49 Lower part of the character space
0 or 48 Upper part of the character space
В руководстве к СМ6329 (https://archive.pdp-11.org.ru/BIBLIOTEKA/ROBOTRON6329/ROBOTRON6329.rar) этот нюанс не описан.
Проблема обнаружилась при анализе печати из графического редактора chiworker для Корвета.
2. Команда ESC K - включение графического режима одинарной плотности.
Поскольку упоминается Robotron CM 6329, то речь скорее всего идет об эмуляции 9-игольчатых принтеров, которые имеют шаг иголок 72 dpi.
В руководстве к Роботрону также упоминается. что его шаг между точками по вертикали - 1/72 дюйма.
И в руководстве от epson видим, что горизонтальная плотность для команды ESC K для 9-игольчатых принтеров должна составлять 60 dpi, а вертикальная - 72:
Prints bit-image graphics in 8-dot columns, at a density of 60 horizontal by 72 vertical dpi
ESCParser же эмулирует вертикальное разрешение в 60 dpi, а не 72. Проблема проявилась при анализе печати скриншотов экрана "Львова". Команда ESC '1', которая должна задавать межстрочное расстояние в 7/72, то есть 7 точек с dpi 72, фактически задает примерно 5,8 точек с dpi 60.
Не анализировал реализацию других команд графики и текста в ESCParser, возможно, есть подобная проблема и с другими командами.
Pyk, по пункту 1 - спасибо, исправлю.
По п. 2 - у меня есть комментарий в коде:
/* 12 соответствует 1/60 inch... На самом деле расстояние между иглами у
9-pin dot matrix printers = 1/72 inch, но при эмуляции на 24-pin принимается 1/60 */
Подумаю над этим попозже.
По п.1 поправил, приложил тут обновлённую версию.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot