java - FontFactor.getFont() 的编码

标签 java itext

希亚斯

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

从 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/

相关文章:

java - JPA 单向 ManyToMany - 检索列表时的重复位置

Java boolean 值 |= 运算符

java - 序列化没有实现?

c# - Itextsharp 合并 Pdfs 与 acrofields

java - 使用java将文件转换为PDF

pdf - 在浏览器中显示 PDF 时,我可以隐藏 Adob​​e float 工具栏吗?

javascript - iTextSharp : Javascript in PDF not firing when filled in in vb. 网络

java - 使用 Oracle PL/SQL 扩充 zip 流

java - Selenium 需要大量时间来获取给定 URL 的动态页面

java - iText 变音符号(例如 D̂、M̂ 等)无法在 PDF 上正确显示