2015-12-21 35 views
0

我需要使用特定字体来生成文档,因为它包含特殊字符,如“©”,iText不支持正常字体。在iTextPDF中将BOLD设置为自定义字体

所以,我做了这个:

BaseFont CROACIA = BaseFont.createFont("C:\\FreeSans.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED); 

Font CROATA = new Font(CROACIA, 12); 

它工作正常,我的“DJ”问题就解决了,事情是,我不能将其设置为黑体

我试图让不同的字体,像THIS_

Font CROATABOLD = new Font(CROACIA, 12, BOLD); 

“大胆”设置的代码似乎并不错误,但是当我把它应用到一个段落,它只是不工作,字体似乎像往常一样

+0

什么是大胆这里,'Font.BOLD'还是其他什么东西? –

回答

2

FreeSans正常和FreeSansBold是不同的字体同一家族。您提供了FreeSans.ttf字体程序的路径,因此iText可以在FreeSans系列中使用常规字体。如果你想使用粗体字体,你需要提供一个FreeSansBold.ttf的路径,这是一个不同字体的字体程序。

这显示在FreeSansBold例如:

public static final String FONT = "resources/fonts/FreeSans.ttf"; 
public static final String FONTBOLD = "resources/fonts/FreeSansBold.ttf"; 

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 font = new Font(bf, 12); 
    Paragraph p = new Paragraph("FreeSans regular: \u0110", font); 
    document.add(p); 
    BaseFont bfbold = BaseFont.createFont(FONTBOLD, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
    Font bold = new Font(bfbold, 12); 
    p = new Paragraph("FreeSans bold: \u0110", bold); 
    document.add(p); 
    document.close(); 
} 

我们有两个不同的字体FreeSans.ttf与同一家族的FreeSansBold.ttf。一种是常规字体;另一个是粗体字体。如果你看一下结果的文档属性,free_sans_bold.pdf,你清楚地看到两个不同的字体在作怪:

enter image description here