如何在Bash中打印粗体和调整大小的文本?
如何在Bash中打印粗体和调整大小的文本?
第一个问题\n如何使用lp
打印带有\"BOLD\"文本的内容?\n示例:\necho -e \"\\e[1mBOLD\\e[0m\" | lp
\n将在白纸上打印出以下内容:\n1mBOLD0m
\n如何获取:\nBOLD\n?\n第二个问题\n如何打印[font size=33]SIZED TEXT[/font]
?\n我目前唯一知道的方法是使用a2ps
。\n示例:\na2ps -B --portrait --columns=1 --rows=1 --borders=no --font-size=18 --margin=0 text.txt | lp
\n上述命令将打印出大号字体的文本,然而肉眼可见仍存在较大的页边距间隙。它太大了以至于不容忽视。我想要像lp
一样打印,将其打印在纸张边缘,并且使用更大的字体。\n答案总结\n根据我在这里得到的答案,并经过测试。证明了打印出漂亮格式和大小的字体
不像打印echo
输出那样简单。在这里需要考虑许多因素,如页边距、字体大小、字体格式,以及支持lp
的附加功能。大多数系统默认带有lp
,但没有aha
和wkhtmltopdf
,这可能是因为人们可以在Abiword或任何文字处理软件中轻松地完成。但对于我来说,我需要它用于我的bash脚本。设置起来有点复杂,但一旦设置完成,它绝对比任何文字处理软件更快。唯一无法避免的问题是页边距,因为在我的情况下,默认情况下它带有一定数量的边距,与left:top - 1:1.6cm
进行比较,当字体变小时,页边距变宽,当字体变大时,页边距变窄。这样的问题在文字处理软件中可以很容易解决,但我更喜欢速度和可以接受的问题。从答案中我们知道,aha
将会更新与字体大小
有关的功能,我不知道那个功能会是什么样子,但我期待着它。\n非常感谢所有参与此帖子的人。
如何在Bash中打印粗体和调整大小的文本?
首先,不要直接使用原始的ANSI转义序列,因为这样很难阅读和维护。使用"tput"命令为您生成转义序列。
有一个名为"aha"的工具可以将ANSI转义序列转换为HTML。您可以使用"sudo apt-get install aha"或"sudo dnf install aha"命令安装它。如果在您的平台上不可用,您可以使用链接下载并编译它。
然后,您可以使用一个名为"wkhtmltopdf"的工具将HTML转换为PDF。如果您还没有安装它,可以安装(或下载并编译)它。
使用这些工具,您可以使用ANSI转义序列生成一个PDF,您的打印机很可能会打印出来。序列如下:
(tput
"- -"参数使"wkhtmltopdf"从"stdin"读取并写入"stdout"。
下面是一个示例:
#!/bin/bash
# 强制tput使用ANSI终端能力
export TERM=ansi
# 边距设置
top=18
bottom=18
left=1.6
right=1.6
pagesize=A4
fontsize=30px
# 方便使用的函数
function bold {
tput bold
echo -n "$@"
# bold本身无法被关闭,所以这里关闭所有属性
tput sgr0
}
function ul {
tput smul
echo -n "$@"
tput rmul
}
function rev {
# 实际上是"standout mode",但在ANSI中是"reverse mode"
tput smso
echo -n "$@"
tput rmso
}
# 启动一个子shell以便将输出导入aha
(
echo "让我们尝试使$(bold this)变粗体。"
echo "并且$(ul this)被下划线。"
echo "这里我们使用$(bold $(ul both))修饰符。"
echo "这将是$(rev reverse)的效果。"
# 使用tput生成颜色映射
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,^
,," | \sed -E 's,^
,
,' | \
wkhtmltopdf --page-size $pagesize -T $top -B $bottom -L $left -R $right - - | lp
这应该在纸上产生类似于下面的效果:
![enter image description here](https://i.stack.imgur.com/yC96k.png)
编辑:
我在"aha"中提了一个pull request,添加了一个"--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