Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FontFactor.getFont()的编码_Java_Itext - Fatal编程技术网

Java FontFactor.getFont()的编码

Java FontFactor.getFont()的编码,java,itext,Java,Itext,希亚斯 我正在尝试显示以下字符串: λλλλλλλλλ 从RTF文件中读取,解析并放入该变量。它在代码中不用作常量 Font pdfFont = FontFactory.getFont(font.getFont().getName(), BaseFont.IDENTITY_H, embed, font.getFont().getSize2D(), style); Phrase phrase = new Phrase("λλλλλλλλλλλλλλλλλλλλλλλλ", pdfF

希亚斯

我正在尝试显示以下字符串:

λλλλλλλλλ

从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中可见


非常感谢

我想您希望得到如下结果:

那很容易。我首先尝试了官方文档中的示例。该示例是为回答以下问题而编写的:

然后我将
文本更改为:

public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb";
public static final String FONT = "c:/windows/fonts/arial.ttf";
如您所见,我在源代码中没有使用
λ
(这是一种糟糕的做法)。相反,我使用
\u03bb
,这是
λ的Unicode表示法

结果如下:

那不是你想要的;你想要阿里亚姆特。因此,我将
字体更改为:

public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb";
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

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

  • 或者。。。(当我搜索这个问题的答案时,点击次数太多了)

我想您希望得到如下结果:

那很容易。我首先尝试了官方文档中的示例。该示例是为回答以下问题而编写的:

然后我将
文本更改为:

public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb";
public static final String FONT = "c:/windows/fonts/arial.ttf";
如您所见,我在源代码中没有使用
λ
(这是一种糟糕的做法)。相反,我使用
\u03bb
,这是
λ的Unicode表示法

结果如下:

那不是你想要的;你想要阿里亚姆特。因此,我将
字体更改为:

public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb";
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

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

  • 或者。。。(当我搜索这个问题的答案时,点击次数太多了)

您试过ArialUni吗?该字体包含更广泛的字形选择。@mkl我刚刚测试过,arial.ttf也知道Lambda。也许问题的原因是不好的编码卫生。您不需要在源代码中添加特殊字符;你改用Unicode符号。你试过ArialUni吗?该字体包含更广泛的字形选择。@mkl我刚刚测试过,arial.ttf也知道Lambda。也许问题的原因是不好的编码卫生。您不需要在源代码中添加特殊字符;这里真正的问题是,我们得到我们解析的RTF文本,然后直接在iText上使用RTF字符串。我想我需要先转换它们,但这给了我一个指针。。。谢谢没有关系。。当我嵌入字体时,真正的问题是,我们得到我们解析的RTF文本,然后直接在iText上使用RTF字符串。我想我需要先转换它们,但这给了我一个指针。。。谢谢没有关系。。当我嵌入字体时,它就工作了