如何使用iText在PDF中嵌入Helvetica字体?
以下不起作用:
BaseFont helvetica = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1252, BaseFont.EMBEDDED);
Font font = new Font(helvetica, 20, Font.BOLD);
也就是说,这将返回false:
font.getBaseFont().isEmbedded()
如果我自己提供TrueType文件作为createFont()方法的参数,则嵌入有效。
答案 0 :(得分:3)
我做了一些挖掘源代码,似乎iText明确地忽略了某些字体的BaseFont.EMBEDDED
标志,而Helvetica就是其中之一。
如果您为Helvetica提供字体文件(例如TrueType .ttf),嵌入可能会有效。
答案 1 :(得分:2)
是的,嵌入已定义的字体不起作用。
它无法正常工作。
iText,为了嵌入字体,必须能够访问字体资源。定义的字体由PDF阅读器提供,因此在PDF创建过程中您的库无法使用。
此外,每个PDF阅读器必须提供此字体,但可以自由选择此字体的许可方法。除了在该阅读器中显示PDF文件外,他们的许可证可以禁止任何最终用途。
答案 2 :(得分:1)
PDF规范定义了预期在PDF查看器中可用的8种字体,因此不需要嵌入它们。 Helvetica就是其中之一。
答案 3 :(得分:1)
此程序将帮助您添加itext所具有的所有字体样式。
public class FontStyle{
public static void main(String[] args) {
// creation of the document with a certain size and certain margins
// may want to use PageSize.LETTER instead
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
try {
// creation of the different writers
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream("SupportedFontsStyle.pdf"));
final Chunk NEWLINE = new ChunkPF("\n");
document.open();
Phrase phrase = new Phrase();
LineSeparator lineSeperator = new LineSeparator();
final Font font_h1_normal = FontFactory.getFont("Courier",8F, Font.NORMAL);
phrase.add(new Chunk("Courier", font_h1_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h2_normal = FontFactory.getFont("Courier-Bold", 8F,Font.BOLD);
phrase.add(new Chunk("Courier-Bold ", font_h2_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h3_normal = FontFactory.getFont("Courier-Oblique",8F, Font.NORMAL);
phrase.add(new Chunk("Courier-Oblique ", font_h3_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h4_normal = FontFactory.getFont("Courier-BoldOblique", 8F,Font.BOLD);
phrase.add(new Chunk("Courier-BoldOblique", font_h4_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h5_normal = FontFactory.getFont("Helvetica",8F, Font.NORMAL);
phrase.add(new Chunk("Helvetica ", font_h5_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h6_normal = FontFactory.getFont("Helvetica-Bold", 8F,Font.BOLD);
phrase.add(new Chunk("Helvetica-Bold ", font_h6_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h7_normal = FontFactory.getFont("Helvetica-BoldOblique",8F, Font.BOLD);
phrase.add(new Chunk("Helvetica-BoldOblique", font_h7_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h8_normal = FontFactory.getFont("Symbol", 8F,Font.NORMAL);
phrase.add(new Chunk("Symbol", font_h8_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h9_normal = FontFactory.getFont("Times-Bold",8F, Font.BOLD);
phrase.add(new Chunk("Times-Bold ", font_h9_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h10_normal = FontFactory.getFont("Times", 8F,Font.NORMAL);
phrase.add(new Chunk("Times ", font_h10_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h12_normal = FontFactory.getFont("Times-BoldItalic", 8F,Font.BOLDITALIC);
phrase.add(new Chunk("Times-BoldItalic ", font_h12_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h13_normal = FontFactory.getFont("Times-Italic",8F, Font.ITALIC);
phrase.add(new Chunk("Times-Italic ", font_h13_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h14_normal = FontFactory.getFont("Times-Roman", 8F,Font.NORMAL);
phrase.add(new Chunk("Times-Roman ", font_h14_normal));
phrase.add(ChunkPF.NEWLINE);
final Font font_h15_normal = FontFactory.getFont("ZapfDingbats",8F, Font.NORMAL);
phrase.add(new Chunk("ZapfDingbats ", font_h15_normal));
phrase.add(ChunkPF.NEWLINE);
document.add(phrase);
document.close();
} catch (Exception ex) {
System.err.println(ex.getMessage());
}
}
}