我正在尝试在我的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字体,但这些字体似乎有效,但我真的需要这个。