在终端上以粗体形式打印

10

如何使用printf以粗体方式打印输出?"[1m测试粗体"没有任何作用。

String format = "%-20s %-15s %-20s %-15s %-10s";

System.out.printf(format, "Name", "Group_name", "Java_Prof_Level", "Cpr_Nr", "Gender", "[1m testing bold");

你需要先放置粗体的参数,而不是最后。 - Malik Brahimi
请参见 https://github.com/fusesource/jansi - vandale
@Malik无法工作,因为格式“[1m testing bold”被打印为txt。 - Na Dia
这一定是2015年的一个巨大重复问题。为什么没有努力找到规范的问题?例如,"[1m"明显是关于ANSI转义码(例如,虚拟终端)的,搜索引擎的访问者可能会在这里被困住。 - Peter Mortensen
3个回答

21

在Java的System.out中无法打印粗体,它只会将内容流式传输到标准输出流,因此原则上只能输出未格式化的文本。

然而,一些软件包解释特殊字符序列(即所谓的ANSI转义序列)以允许格式化文本。

请注意,ANSI转义序列以转义字符开始,因此您需要将其添加到字符串中。(尝试 "\u001B[1m 我是粗体" 或者 "\033[0;1m" + "我是粗体"。)

大多数Unix终端默认解释ANSI转义序列。在旧版DOS时代,您需要使用ANSI.SYS才能使转义序列起作用。

在Windows和Eclipse终端中,这些代码不起作用。


6
这实际上取决于使用的控制台类型。对于像NetBeansEclipse这样的IDE,我不确定是否可以影响字体。但对于大多数终端来说,以下转义字符是有效的:
String textInBold = "Java_Prof_Level";
System.out.print("\033[0;1m" + textInBold);

谢谢,刚刚尝试了:" \033 [0;1m"。在Netbeans中不起作用。 - Na Dia

0
我找到了这个。它是针对爱普生ECS/POS的。
string ESC = "\u001B";
string GS = "\u001D";
string InitializePrinter = ESC + "@";
string BoldOn = ESC + "E" + "\u0001";
string BoldOff = ESC + "E" + "\0";
string DoubleOn = GS + "!" + "\u0011";  // 2x sized text (double-high + double-wide)
string DoubleOff = GS + "!" + "\0";

printJob.Print(InitializePrinter);
printJob.PrintLine("Here is some normal text.");
printJob.PrintLine(BoldOn + "Here is some bold text." + BoldOff);
printJob.PrintLine(DoubleOn + "Here is some large text." + DoubleOff);

PDF文档的第一页:这里是一个参考链接

我必须在命令前加""。否则它不起作用:

oStream.print("" + (char)27 + (char)97 + (char)1); // For centering text

你能添加一些转义字符的参考链接吗?这将有助于找到其他转义字符。 - AndroidLearner
链接已损坏:“404 - 文件或目录未找到。” - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接