有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在iTextPDF中将粗体设置为自定义字体

我需要使用一种特定的字体来制作文档,因为它包含一些特殊的字符,比如“Đ”,而iText附带的普通字体不支持这些字符

所以,我做了这个:

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

Font CROATA = new Font(CROACIA, 12);

它工作得很好,我的问题也解决了,问题是我不能将其设置为大胆

我试着用这样的“粗体”设置来制作一种不同的字体_

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

代码似乎没有错误,但当我将其应用于一个段落时,它就是不起作用,字体似乎和往常一样正常


共 (1) 个答案

  1. # 1 楼答案

    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.ttfFreeSansBold.ttf属于同一家族。一种是常规字体;另一种是粗体字体。如果查看结果的文档属性free_sans_bold.pdf,您会清楚地看到两种不同的字体在起作用:

    enter image description here