【问题标题】:iText 7: How to build a paragraph mixing different fonts?iText 7:如何构建混合不同字体的段落?
【发布时间】:2016-10-24 05:58:28
【问题描述】:

这几天一直在用iText 7构建pdf文件,可惜iText 7与iText 5有很大不同,文档还很不完整。

我正在尝试构建一个混合两种字体或两种字体样式的段落(例如:在段落中间有一个粗体文本)

使用 iText 5,这将使用 Chunks 完成:

Font regular = new Font(FontFamily.HELVETICA, 12);
Font bold = Font font = new Font(FontFamily.HELVETICA, 12, Font.BOLD);
Phrase p = new Phrase("NAME: ", bold);
p.add(new Chunk(cc_cust_dob, regular));
PdfPCell cell = new PdfPCell(p);

使用 iText 7,我仍然没有找到方法。

有没有人尝试使用最新版本的 iText 来做到这一点?

注意:我使用的是 csharp,但 java 也很有用

【问题讨论】:

    标签: itext itext7


    【解决方案1】:

    请阅读文档,更具体地说是iText 7: building blocks "Chapter 1: Introducing the PdfFont class"

    在那一章中,您会发现在使用 iText 7 时切换字体要容易得多,因为您可以使用默认字体和字体大小,您可以定义和重用 Style 对象等等。

    一个例子:

    Style normal = new Style();
    PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
    normal.setFont(font).setFontSize(14);
    Style code = new Style();
    PdfFont monospace = PdfFontFactory.createFont(FontConstants.COURIER);
    code.setFont(monospace).setFontColor(Color.RED)
        .setBackgroundColor(Color.LIGHT_GRAY);
    Paragraph p = new Paragraph();
    p.add(new Text("The Strange Case of ").addStyle(normal));
    p.add(new Text("Dr. Jekyll").addStyle(code));
    p.add(new Text(" and ").addStyle(normal));
    p.add(new Text("Mr. Hyde").addStyle(code));
    p.add(new Text(".").addStyle(normal));
    document.add(p);
    

    首先我们定义一个Style,我们称之为normal,它使用14 pt Times-Roman。然后我们定义一个 Style,我们称之为 code,它使用 12 pt Courier in Red 和灰色背景。

    然后我们使用使用这些样式的Text 对象组成一个Paragraph

    请注意,您可以链接add() cmets,就像本例中所做的那样:

    Text title1 = new Text("The Strange Case of ").setFontSize(12);
    Text title2 = new Text("Dr. Jekyll and Mr. Hyde").setFontSize(16);
    Text author = new Text("Robert Louis Stevenson");
    Paragraph p = new Paragraph().setFontSize(8)
        .add(title1).add(title2).add(" by ").add(author);
    document.add(p);
    

    我们将新创建的Paragraph 的字体大小设置为 8 pt。此字体大小将由添加到Paragraph 的所有对象继承,除非对象覆盖了该默认大小。 title1 就是这种情况,我们定义了 12 pt 的字体大小,title2 定义了 16 pt 的字体大小。作为String (" by ") 添加的内容和作为Text 对象添加的未定义字体大小的内容从添加它们的Paragraph 继承8 pt 的字体大小。

    这是官方教程的复制/粘贴。我希望这对于不允许“仅链接”答案的 StackOverflow 来说已经足够了。这个“没有链接只回答规则”不应该导致复制/粘贴手册的一整章......

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多