gpt4 book ai didi

java - 在 Java 中打印数学符号给出错误的输出

转载 作者:行者123 更新时间:2023-12-01 06:18:46 25 4
gpt4 key购买 nike

我正在尝试使用 TextLayout 类进行打印。当我打印一些数学符号时,我会出现奇怪的行为。

下图显示了将字符串“First + 2”和“First\u222A 2”打印到 PDF 文件的结果。当打印“union”符号(\u222A)时,看起来符号后面的字符会覆盖符号之前的字符。

enter image description here

下面是打印一个不包含\u222A 的字符串和另一个包含\u222A 的字符串的测试代码:

public class PrintTest {

public static void main(String[] args) {
PrinterJob pj = PrinterJob.getPrinterJob();

pj.setPrintable(new Printable() {
public int print(Graphics g, PageFormat pf, int pageIndex) {
if (pageIndex != 0) return NO_SUCH_PAGE;

Graphics2D g2 = (Graphics2D) g;
Font font = new Font("SansSerif", Font.PLAIN, 10);

// Draw string with + char
TextLayout layout = new TextLayout("First + 2", font, g2
.getFontRenderContext());
layout.draw(g2, 40, 80);

// Draw string with union character
layout = new TextLayout("First \u222A 2", font, g2
.getFontRenderContext());
layout.draw(g2, 40, 100);

return PAGE_EXISTS;
}
});

if (pj.printDialog()) {
try {
pj.print();
} catch (PrinterException e) {
System.out.println(e.getMessage());
}
}
}

}

我在 Windows 7 和 8 上运行 java 1.7.0_17,并在多台打印机上进行了测试,包括打印为 PDF。所有测试都显示出同样的问题。我使用“并集”、“交集”和“排除”符号得到相同的结果。

我真的被困在这里了。任何帮助将不胜感激。

更新:使用逻辑字体时似乎会出现问题。我对所有已安装的逻辑字体(“Dialog”、“DialogInput”、“Monospaced”、“SansSerif”和“Serif”)进行了测试,并遇到了同样的问题。当我使用支持这些符号的物理字体(“Lucida Sans”和“Arial Unicode MS”)进行测试时,我得到了所需的输出。

enter image description here

这解决了我眼前的问题,因为我不依赖于使用逻辑字体。

最佳答案

实际上,你一直在打印 Unicode 字符;您的帖子标题表明您正在打印 Unicode 以外的内容。您正确打印的所有字母字符都以 Unicode 编码,因为 Java 就是这样编码字符串的。

所以您正在尝试打印“Union”符号,但它不起作用。您有什么证据表明您正在打印的打印机支持该功能?您尝试过的任何打印机很可能都不支持它,因此行为不可预测。这是可能导致这种情况的最明显的事情。

关于java - 在 Java 中打印数学符号给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16390974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com