iText 7:如何构建混合不同字体的段落?

7
我已经使用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吗?

注意:我正在使用C#,但Java也很有用。

1个回答

20

请阅读文档,特别是iText 7:构建块“第1章:介绍PdfFont类”

在那一章中,您将发现在使用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);

首先我们定义一个名为normalStyle,使用14 pt Times-Roman字体。然后我们定义一个名为codeStyle,使用12 pt Courier字体,红色字体颜色和灰色背景。

接下来,我们使用应用了这些样式的Text对象组成一个Paragraph

请注意,您可以像此示例中所做的那样链接多个add()命令。

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的字体大小设置为8pt。该字体大小将被添加到Paragraph的所有对象继承,除非该对象覆盖了默认大小。这适用于title1,我们定义了12pt的字体大小,对于title2,我们定义了16pt的字体大小。将作为String"by")添加的内容和作为Text对象添加的内容未定义字体大小,因此继承来自所添加到的Paragraph的8pt字体大小。
这是从官方教程中复制/粘贴的。希望这足以满足StackOverflow的要求,在那里“仅链接”答案不被允许。 "无链接答案规则" 不应该导致复制/粘贴手册的整个章节...

4
你好 Bruno,感谢提供的信息。我在网站上寻找这些信息时没有找到,入口在什么地方?(除了点击你发布的链接以外)该网站的教程指向:http://developers.itextpdf.com/content/itext-7-jump-start-tutorial - lpinho
网站更新导致iText网站上的链接失效。对于未来寻找帖子中提到的链接的人:https://kb.itextpdf.com/home/it7kb/ebooks/itext-7-jump-start-tutorial-for-java/chapter-1-introducing-basic-building-blocks - Halcyon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接