在 iText 中是否可以创建具有不同样式的自定义字体并使其与 .setBold 和 .setItalic 一起使用?

问题描述 投票:0回答:1

所以我有这个代码

PdfFont customFont = PdfFontFactory.createFont("/templates/NunitoSans.ttf", PdfEncodings.IDENTITY_H);
PdfFont customFontBold = PdfFontFactory.createFont("/templates/NunitoSansBold.ttf", PdfEncodings.IDENTITY_H);
PdfFont customFontBoldItalic = PdfFontFactory.createFont("/templates/NunitoSansBoldItalic.ttf", PdfEncodings.IDENTITY_H);
PdfFont customFontItalic = PdfFontFactory.createFont("/templates/NunitoSansItalic.ttf", PdfEncodings.IDENTITY_H);

现在我在解析器中跟踪我是粗体还是斜体,如果是这样我必须使用

setFont
调整为适合组合的值

是否可以让 setFont 理解它可以是粗体、斜体或两者都使用 .setBold 或 .setItalic 并让它选择正确的字体?

java itext
1个回答
0
投票

您可以使用

FontProvider
。这允许您首先使用 FontFamily 设置器选择 Verdana 或 NunitoSans 等字体系列,然后使用
FONT_WEIGHT
FONT_STYLE
属性选择粗体和斜体样式。

例如:

try (
    PdfWriter pdfWriter = new PdfWriter(TARGET);
    PdfDocument pdfDocument = new PdfDocument(pdfWriter);
    Document document = new Document(pdfDocument);
) {
    FontProvider fontProvider = new FontProvider();
    fontProvider.addSystemFonts();
    document.setFontProvider(fontProvider);

    Div div = new Div();
    div.setFontFamily("Verdana");
    Paragraph paragraph = new Paragraph();
    paragraph.add("Regular");
    div.add(paragraph);
    paragraph = new Paragraph();
    paragraph.setProperty(Property.FONT_WEIGHT, "700");
    paragraph.add("bold");
    div.add(paragraph);
    paragraph = new Paragraph();
    paragraph.setProperty(Property.FONT_STYLE, "italic");
    paragraph.add("Italic");
    div.add(paragraph);
    paragraph = new Paragraph();
    paragraph.setProperty(Property.FONT_WEIGHT, "700");
    paragraph.setProperty(Property.FONT_STYLE, "italic");
    paragraph.add("Bold & Italic");
    div.add(paragraph);
    document.add(div);
}

这会创建(如果安装了 Verdana 字体系列):

FontProvider
还有其他方法(
addStandardPdfFonts
addDirectory
和许多
addFont
重载)来添加字体,请查看 JavaDocs。


使用当前的 iText 8.0.4-SNAPSHOT 进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.