如何在Bash中打印粗体和调整大小的文本?

17 浏览
0 Comments

如何在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,但没有ahawkhtmltopdf,这可能是因为人们可以在Abiword或任何文字处理软件中轻松地完成。但对于我来说,我需要它用于我的bash脚本。设置起来有点复杂,但一旦设置完成,它绝对比任何文字处理软件更快。唯一无法避免的问题是页边距,因为在我的情况下,默认情况下它带有一定数量的边距,与left:top - 1:1.6cm进行比较,当字体变小时,页边距变宽,当字体变大时,页边距变窄。这样的问题在文字处理软件中可以很容易解决,但我更喜欢速度和可以接受的问题。从答案中我们知道,aha将会更新与字体大小有关的功能,我不知道那个功能会是什么样子,但我期待着它。\n非常感谢所有参与此帖子的人。

0
0 Comments

如何在Bash中打印粗体和调整大小的文本?

首先,不要直接使用原始的ANSI转义序列,因为这样很难阅读和维护。使用"tput"命令为您生成转义序列。

有一个名为"aha"的工具可以将ANSI转义序列转换为HTML。您可以使用"sudo apt-get install aha"或"sudo dnf install aha"命令安装它。如果在您的平台上不可用,您可以使用链接下载并编译它。

然后,您可以使用一个名为"wkhtmltopdf"的工具将HTML转换为PDF。如果您还没有安装它,可以安装(或下载并编译)它。

使用这些工具,您可以使用ANSI转义序列生成一个PDF,您的打印机很可能会打印出来。序列如下:

(tput ; ...) | aha | wkhtmltopdf - - | lp

"- -"参数使"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

0