Как напечатать полужирный и размерный текст при печати bash - PullRequest
5 голосов
/ 19 июня 2020

1-й вопрос

печать текста « ЖИРНЫЙ » ... используя lp, если возможно.

пример:

echo -e "\e[1mBOLD\e[0m" | lp

распечатает это ниже на белой бумаге

1mBOLD0m

как получить:

ЖИРНЫЙ

?

2-й вопрос

Печать [font size=33]SIZED TEXT[/font], как?

единственный способ, который я знаю на данный момент, - использовать a2ps

пример:

a2ps -B --portrait --columns=1 --rows=1 --borders=no --font-size=18 --margin=0 text.txt | lp

команда выше распечатает текст большого размера, однако там все же невооруженным глазом здесь виден большой разрыв маржи. он слишком велик, чтобы его не заметить. Я хочу напечатать его так же, как lp напечатал его на краю моей бумаги, а поверх него - более крупным шрифтом.

РЕЗЮМЕ ОТВЕТА

на основе на ответ я получил и протестировал. Это доказывает, что printing a nice formatted and sized font не так просто, как распечатать результат echo. Здесь следует учитывать многие вещи, такие как поля, размеры шрифта, форматирование шрифта и, в частности, надстройки, которые поддерживают lp. Это правда, что большая часть системы по умолчанию поставляется с lp, но не с aha, а также с wkhtmltopdf, это может быть потому, что люди могут легко сделать это в Abiword или любом текстовом редакторе. Но для меня он нужен мне постоянно на скрипте bash. Его довольно сложно настроить, но после настройки он определенно быстрее любого текстового процессора. Единственная проблема, которую нельзя избежать, - это поле, так как в моем случае по умолчанию оно было с определенным количеством полей со сравнениями left:top - 1:1.6cm, оно становится шире, когда шрифт становится меньше, и становится тоньше, когда шрифт становится больше. Эта проблема легко устраняется в текстовом редакторе, но, опять же, я предпочитаю скорость и приемлемые проблемы. Из ответа мы знаем, что aha будет обновлен, связанный с font sizes, я не знаю, на что будет похожа эта функция, но я с нетерпением жду ее.

Спасибо очень всем, кто участвовал в этом посте

1 Ответ

7 голосов
/ 25 июня 2020

Для начала не используйте необработанные управляющие последовательности ANSI напрямую, так как это затрудняет чтение и сопровождение. Используйте tput для создания управляющих последовательностей для вас.

Существует инструмент под названием aha , который может преобразовывать escape-последовательности ANSI в HTML. Вероятно, вы можете установить его, используя sudo apt-get install aha или sudo dnf install aha. Если он недоступен на вашей платформе, вы можете загрузить и скомпилировать его по ссылке.

Затем вы можете преобразовать HTML в PDF с помощью инструмента под названием wkhtmltopdf . Установите (или загрузите и скомпилируйте) это тоже, если у вас его еще нет.

С помощью этих инструментов вы можете использовать управляющие последовательности ANSI для создания PDF-файла, и ваш принтер, вероятно, будет печатать это нормально . Последовательность принимает следующий вид:

(tput <commands>; ...) | aha | wkhtmltopdf - - | lp

Аргументы - - для wkhtmltopdf заставляют его читать из stdin и записывать в stdout

Пример:

<code>#!/bin/bash

# force tput to use the ansi terminal capabilities
export TERM=ansi

# Margin settings
top=18
bottom=18
left=1.6
right=1.6
pagesize=A4

fontsize=30px

# convenience functions

function bold {
    tput bold
    echo -n "$@"
    # bold can't be turned off by itself so this
    # turns off all attributes
    tput sgr0
}

function ul {
    tput smul
    echo -n "$@"
    tput rmul
}

function rev {
    # standout mode really, but reverse mode for ansi
    tput smso
    echo -n "$@"
    tput rmso
}

# start a subshell to be able to pipe the output to aha
(
    echo "Lets try to make $(bold this) bold."
    echo "and $(ul this) is underlined."
    echo "Here we use $(bold $(ul both)) decorators."
    echo "This will be in $(rev reverse)."

    # using tput to produce a color map
    for fg_color in {0..7}; do
        set_foreground=$(tput setaf $fg_color)
        for bg_color in {0..7}; do
            set_background=$(tput setab $bg_color)
            echo -n $set_background$set_foreground
            printf ' F:%s B:%s ' $fg_color $bg_color
        done
        echo $(tput sgr0)
    done
) | aha | \
sed -E "s,^<pre>$,<div style=\"font-size:${fontsize}\"><pre>," | \
sed -E 's,^
$, , '| \ wkhtmltopdf --page-size $ pagesize -T $ top -B $ bottom -L $ left -R $ right - - | lp

На бумаге должно получиться примерно следующее:

enter image description here

Edit: I made a pull request in aha, чтобы добавить опцию --style, которая теперь утвержден и включен в aha версию 0.5.1. В этой версии вы можете удалить строки sed и указать aha, какой размер шрифта вам нужен.

Пример:

   ...
) | aha --style 'font-size:1.875em' | \
wkhtmltopdf --page-size $pagesize -T $top -B $bottom -L $left -R $right - - | lp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...