我一直在使用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也很有用
谢谢,
LuísPinho
答案 0 :(得分:9)
请阅读文档,更具体地说是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,灰色背景。
然后我们使用Paragraph
使用这些样式的对象组成Text
。
请注意,您可以链接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
的字体大小设置为8磅。除非对象覆盖默认大小,否则此字体大小将由添加到Paragraph
的所有对象继承。 title1
的情况就是这种情况,我们为其定义了12 pt的字体大小和title2
,我们将字体大小定义为16 pt。添加为String
(" by "
)的内容和作为Text
对象添加的内容未定义字体大小会从Paragraph
继承字体大小8 pt他们被添加。
这是官方教程的复制/粘贴。我希望这对于StackOverflow来说已经足够了,其中不允许使用“仅链接”答案。这个“没有链接的答案规则”不应该导致复制/粘贴手册的完整章节......