gpt4 book ai didi

java - FontFactor.getFont() 的编码

转载 作者:行者123 更新时间:2023-12-02 03:25:32 24 4
gpt4 key购买 nike

希亚斯

我正在尝试显示此字符串:

从 RTF 文件中读取、解析并放入此变量中。它在代码中不用作常量。

    Font pdfFont = FontFactory.getFont(font.getFont().getName(), BaseFont.IDENTITY_H, embed, font.getFont().getSize2D(), style);    
Phrase phrase = new Phrase("λλλλλλλλλλλλλλλλλλλλλλλλ", pdfFont);
ColumnText.showTextAligned(content[i], alignment, phrase, x, y, rotation);

我还尝试了 CP1252(以及基本上我发现的所有其他编码)和简单的 ArialMT.ttf 字体,但该死的字符串从未显示。我可以看到在 iText 中转换为字节数组(我们使用 5.5.0)总是返回一个空长度字节数组,这解释了为什么不使用文本,但我不明白为什么。我需要使用什么编码才能使其在 PDF 中可见?

非常感谢

最佳答案

我想您想要得到如下所示的结果:

enter image description here

这很容易。我首先尝试了SunCharacter官方文档中的示例。该示例是为了回答以下问题而编写的:iText : Unable to print mathematical characters like ∈, ∩, ∑, ∫, ∆ √, ∠

然后我将TEXT更改为:

public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb";

如您所见,我在源代码中没有使用λ(这是不好的做法)。相反,我使用 \u03bb,它是 λ 的 Unicode 表示法。

结果如下:

enter image description here

这不是你想要的;你想要 ArialMT。所以我将 FONT 更改为:

public static final String FONT = "c:/windows/fonts/arial.ttf";

这给了我想要的 PDF。

这是完整的代码示例:

public class LambdaCharacter {
public static final String DEST = "results/fonts/lambda_character.pdf";
public static final String FONT = "c:/windows/fonts/arial.ttf";
public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb";

public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new LambdaCharacter().createPdf(DEST);
}

public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font f = new Font(bf, 12);
Paragraph p = new Paragraph(TEXT, f);
document.add(p);
document.close();
}
}

我工作得很好。

也许您并没有真正使用 Arial。也许 font.getFont().getName() 没有为您提供正确的字体名称。或者它可能为您提供了正确的字体名称,但您忘记注册该字体。在这种情况下,您将看到使用 Helvetica。 Helvetica 无法渲染 lambda。您需要 Arial 或 Cardo-Regular 或 Arial Unicode 或其他字体,只要该字体知道如何呈现 lambda。

如果您不知道如何注册字体,请阅读:

关于java - FontFactor.getFont() 的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38979508/

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