How to add Jfreechart labels for SpiderWebPlot usinf awt Font

问题描述 投票:0回答:1

我正在使用 Jfreechart 生成 SpiderWebPlot,在我的数据集中我有日语文本,每当我将其生成为 PDF 时,日语文本都不会出现。

  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(5, "current month", "hi項目");
dataset.addValue(4, "current month", "B");
dataset.addValue(3, "current month", "C");
dataset.addValue(5, "current month", "D");
dataset.addValue(2, "current month", "E");
dataset.addValue(4, "previous month", "hi項目");
dataset.addValue(4, "previous month", "B");
dataset.addValue(2, "previous month", "C");
dataset.addValue(4, "previous month", "D");
dataset.addValue(4, "previous month", "E");

这是我的数据集,同时为我正在做的标签设置字体

 SpiderWebPlot spiderWebPlot = new SpiderWebPlot(dataset);

    ClassLoader classLoader = ReportVariables.class.getClassLoader();
    URL resource = classLoader.getResource("notoSansRegular.ttf");
    assert resource != null;
    var f = new File(resource.toURI());
    InputStream is = new FileInputStream(f);
    Font font = Font.createFont(Font.TRUETYPE_FONT, is);

spiderWebPlot.setLabelFont(openFontTTF("notoSansRegular"));

我正在使用 Noto Sans TTF 加载字体(使用 java.awt.Font)。我还是不明白是什么问题?有人可以帮忙吗? 这就是我的图表的样子

java fonts itext awt jfreechart
1个回答
0
投票

没有简单的方法可以在需要时正确处理,将外来字符串与其他字符串编码完全分开,并对编码的各个字符串使用渲染组件。 但是,将文本放入 .properties 文件(特殊的 java 数据文件和类,java 实用程序系统)或逐行以外部字符集编码编写和保存的文本文件,以字节形式从文件中读取并从中提取每个字符串。 在使用外来字符的地方,将字符放入一个新的字符串中,并在字符串构造函数声明参数中使用字符集名称或别名编码。

请参阅 String 的 api 文档构造函数摘要。 (注意:getbytes() 方法) https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

String(byte[] bytes, String charsetName)

String(byte[] bytes, Charset 字符集)

Oracle Corp. java 支持的编码。 注意:机器操作系统必须安装字符集才能使用指定的编码,因此请检查它是否存在。 java.nio.charset.Charset.availableCharsets() https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html

String(StringBuilder 生成器) 还可以查看 api 文档 https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

插入(int offset,int i)

使用 StringBuilder 类,您可以使用与字符集编码中的每个字符匹配的字节数值来构建字符串。 或者,如果一个两字节字符创建一个字符(基数通常是十六进制)

Character.forDigit(int digit, int radix)

插入(整数偏移量,字符 c)

然后按照上面的方法,存入一个带有charset labeled的String中

Character.getName(int codePoint) https://en.m.wikipedia.org/wiki/Hiragana_(Unicode_block) 您可能需要将外来字符映射到 UTF-8 或 UTF-16 的 Unicode 代码点,以创建也响应 Java 和 HTML XML 中常见的国际 ISO“区域设置”设置的网页。

  • 注意输出到面板或文本区域等应在 GUI 组件上设置语言环境以反映所使用的外来字符方案。

以下链接可能对国际化和字符集、编码有一些小帮助。

https://drive.google.com/file/d/1gjHmdC-BW0Q2vXiQYmp1rzPU497sybNy/view?usp=drivesdk

© www.soinside.com 2019 - 2024. All rights reserved.