Вопрос или проблема
Есть ли какой-либо способ достичь такого вывода PDF в Linux?
Я имею в виду чередующиеся синие/зеленые полосы, которые раньше были напечатаны на бумаге для матричных принтеров. Направляющие/отверстия по бокам были бы приятным бонусом!
Существует программа в Windows, HercPrt
, которая создает этот результат, либо из эмулятора Hercules, либо с помощью текстового конвертера в PDF. Я ищу, возможно, виртуальный принтер CUPS для создания полос, или текстовый конвертер в PDF, или даже шаблон в LibreOffice. Конечно, приветствуются другие идеи.
С помощью Postscript можно создать что-то подобное:
“Перфорации” круглые, но при конвертации PDF в JPG они стали квадратными :-(. Текст на белом фоне тоже не жирный.
Вывод, который вы видите, создается программой postscript, следующей за текстом. Не смотрите слишком внимательно, это моя первая postscript-речь. Она создает фон (процедуру contform) в начале каждой страницы, читает текстовый файл (/tmp/passwd) и печатает его на 6 lpi на вашем формате страницы по умолчанию (в моем случае A4). Для выполнения этого скрипта запустите его с ghostscript (gs) или ghostview (gv). Когда вы сохраните скрипт как /tmp/contform.ps, тогда
gs /tmp/contform.ps
или
gv /tmp/contform.ps.
Скрипт:
/CP /closepath load def
/MT /moveto load def
/LT /lineto load def
/S /stroke load def
/F /fill load def
/s 20 string def
/pw { currentpagedevice /PageSize get 0 get } def
/ph { currentpagedevice /PageSize get 1 get } def
.83 1 1 setrgbcolor
% 0 ph MT pw ph LT pw ph 36 sub LT 0 ph 36 sub LT CP F
/contform
{
gsave
.83 1 1 setrgbcolor
ph -1 mul 72 0 {
/i exch def
ph i add
dup
12 exch MT
dup
pw 12 sub exch LT
dup
pw 12 sub exch 36 sub LT
dup
12 exch 36 sub LT CP F
pop
} for
0 setgray
ph -1 mul 72 0 {
/i exch def
/perf { 3 0 360 arc CP F } bind def
ph i add 18 add
dup 6 exch % левый центр перфорации
perf
dup 36 sub 6 exch % 2-й левый центр перфорации
perf
dup pw 6 sub exch % правый центр перфорации
perf
dup 36 sub pw 6 sub exch % 2-й правый центр перфорации
perf
pop
} for
grestore
} bind def
/bottom 12 def
/lineshow % (string) lineshow -
{ %def
% работает как show, но проверяет нижнюю
% границу страницы и также перемещает
% текущую точку вниз на одну строку после каждого вызова
currentpoint exch pop % только координата Y
bottom lt { %if
showpage
contform
12 ph 24 sub moveto % верх новой страницы
} if
gsave show grestore
0 -12 rmoveto % вниз на одну строку
} bind def
% отображает файл /tmp/passwd
/Courier findfont 10 scalefont setfont
0 setgray
contform
12 ph 24 sub moveto
/datafile (/tmp/passwd) (r) file def
/buffer 256 string def
{ % loop
datafile buffer readline { % ifelse
lineshow
}{ % else
datafile closefile
exit
} ifelse
} bind loop
showpage
Несмотря что немного поздно, вы можете использовать этот виртуальный линейный принтер. https://github.com/racingmars/virtual1403
Он был разработан для эмуляции настоящего принтера 1403 для мейнфреймов, для использования с системой Hercules, так что служит одним из выходных принтеров для эмулированных ОС MVS или других мейнфреймов. Размер бумаги и дизайн с зелеными полосами такие же, как у настоящего. Он напрямую обрабатывает EBIDC, но есть отдельная версия (особенность, запрошенная мной!), так что вы можете загружать любой текстовый файл.
Поскольку у меня была такая же проблема, я написал программу prt1403, которая доступна на GitHub: printer 1401.
Пример, это изображение синей полосатой бумаги шириной 9,5 дюйма с моноширинным набором символов:
…Кстати, отпечаток на этой картинке не из матричного принтера. Это либо цепной, либо поездной, либо полосной принтер. Они были высокоскоростными ударными принтерами, использовавшимися мейнфреймовыми компьютерами… https://www.pcmag.com/encyclopedia/term/chain-printer Не то чтобы это имело значение для бумаги или вашего виртуального отпечатка, но я подумал, что сделаю комментарий 😉
.
Ответ или решение
Для достижения эффекта чередующихся синих и зелёных полос в PDF-документах на Linux, как на старой бумаге для матричных принтеров, требуется глубокое понимание того, как работают современные инструменты для работы с PDF и текстом в командной строке Linux. Рассмотрим несколько методов, которые могут помочь воссоздать этот эффект.
Теория
Эффект чередующихся полос, который был популярен в эпоху матричных и линейных принтеров, был результатом заранее напечатанной бумаги, известной как бумага для всплывающих окон (continuous feed paper) или форма с матерчатыми полосами. Эти полосы использовались для улучшения читабельности распечатанного текста. На современные документы этот эффект может быть перенесен с помощью программных средств, например, PostScript, программ работы с PDF или текстовых редакторов.
Пример
На старых матричных принтерах, таких как IBM 1403, бумага с цветными полосами использовалась для разделения строк, улучшая ориентацию при просмотре длинных распечаток. Создание подобного эффекта в современном контексте требует использования средств, таких как PostScript для программной отрисовки цветных полос на фоне текста.
Пример использования PostScript, представленный выше, является хорошей отправной точкой. В приведенном скрипте PostScript описывается создание цветного узора, который генерируется в начале каждой страницы, причем чередуются синие и зеленые полосы. Этот скрипт может быть запущен в таких приложениях, как Ghostscript или Ghostview для отображения или печати PDF-документа с заданными полосами.
Альтернативный путь — использование средств конвертации текста в PDF-файлы, которые поддерживают фоновые изображения или шаблоны, такие как LibreOffice. LibreOffice позволяет создавать шаблоны с закрашенными полосами, которые можно применять ко всему документу.
Применение
Для реализации данного эффекта в Linux можно воспользоваться несколькими подходами:
-
Использование PostScript: Как показано выше, можно написать скрипт на PostScript для создания PDF-документа с нужным фоновым оформлением. Для этого можно использовать Ghostscript. Этот метод требует определенных знаний программирования на языке PostScript, поэтому он подходит для пользователей с опытом.
-
Использование LibreOffice: В LibreOffice можно создать шаблон с чередующимися цветными фонами и использовать его для печати текста. Это более простой и визуальный метод, который подходит для пользователей, предпочитающих работать с GUI.
-
CUPS и виртуальные принтеры: Настроив виртуальный принтер в CUPS с использованием фильтров обработки, можно автоматизировать процесс применения шаблонов к распечатываемым документам. Это более сложный метод, требующий знаний о настройке CUPS и написании фильтров.
-
Генераторы и конвертеры PDF: Программы, такие как
pdflatex
илиwkhtmltopdf
, могут быть настроены для автоматического применения фонов к документам. Эти программы работают через командную строку и могут включить более сложные эффекты верстки. -
Использование скриптов и макросов: Написание небольших скриптов на языке Python или использовании утилит, таких как
PDFtk
, позволит автоматизировать добавление полос к текстовым документам перед их преобразованием в PDF.
Независимо от используемого метода, выбранные инструменты позволяют достичь подходящего визуального эффекта, важного для улучшения читабельности или сохранения стиля старых печатных документов в цифровом формате. Важно учитывать конфигурацию среды и доступные инструменты, чтобы выбрать наилучший подход.