使用iText

时间:2015-12-17 07:30:34

标签: macos pdf itext osx-yosemite true-type-fonts

我正在尝试在我的PDF文档中嵌入“.Helvetica Neue DeskInterface”(Mac OS X Yosemite上的系统字体)字体。然而,虽然字体看似嵌入在文档中,但文档没有文字。

我尝试过不同的编码,但没有任何效果。这是一个重现问题的代码片段:

package itext;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;

public class LucidaTest {

    public static void main(String[] args) throws DocumentException,
            IOException {
        String[] encodings = new String[] { BaseFont.CP1250, BaseFont.CP1252,
                BaseFont.CP1257, BaseFont.WINANSI, BaseFont.MACROMAN, };

        Document document = new Document();
        PdfWriter.getInstance(document, new FileOutputStream(
                "document.pdf"));
        document.open();
        String text = "Some simple text";

        document.add(new Paragraph(text));

        for (int i = 0; i < encodings.length; i++) {
            String encoding = encodings[i];
            BaseFont helvetica = BaseFont
                    .createFont(
                            "/System/Library/Fonts/HelveticaNeueDeskInterface.ttc,0",
                            encoding, BaseFont.EMBEDDED);
            Font font1 = new Font(helvetica, 12);
            char[] chars = text.toCharArray();
            for (int j = 0; j < chars.length; j++) {
                if (!helvetica.charExists(chars[j]))
                    System.out.println("Encoding " + encoding
                            + ", char not found: " + chars[j]);
            }
            document.add(new Paragraph(text + ", encoding " + encoding, font1));
        }
        document.close();
    }
}

结果是一个没有文本的文档用于使用该字体的段落,尽管charExists对所有字符都返回true,并且字体显示为嵌入。

我知道字体实际上可以嵌入PDF中。例如,如果我使用Safari在CSS中打印一个带有“-apple-system”字体的页面,则生成的文档会正确使用该字体,并且字体显示在列表中:

<< /Type /FontDescriptor /FontName /HNUAPP+.HelveticaNeueDeskInterface-Bold
<< /Type /FontDescriptor /FontName /SIHBJH+.HelveticaNeueDeskInterface-Regular
<< /Type /FontDescriptor /FontName /LCFIMY+.HelveticaNeueDeskInterface-Regular

这个字体和iText有一些已知的问题吗?我已经尝试过其他.ttc字体,但这些字体似乎有效,但我真的需要这个。

0 个答案:

没有答案