首页 > 解决方案 > 如何使用 iText 列表将具有不同权重的文本添加到单个 ListItem

问题描述

我使用 iText 7 创建了一个问题和答案列表,其中问题和答案都显示在列表的同一行中。我正在尝试使问题变得粗体,同时将答案保留为正常的字体粗细。当我运行类似于下面显示的代码时,我得到这个 (com.itextpdf.layout.element.Text@73df99a1) 代替粗体文本。是否可以在同一个 iText 7 ListItem 中获得不同权重的字体?

String dest = "destination.pdf"
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);

List qaList = new List();

qaList.add(new ListItem(new Text("Question 1?").setBold() + "Answer 1"));
qaList.add(new ListItem(new Text("Question 2?").setBold() + "Answer 2"));

document.add(qaList);

document.close();

标签: javaitextpdf-generationitext7

解决方案


您可以ListItem通过显式创建Paragraph具有不同样式的包含片段并将该段落添加到列表项中来在 iText 7 中应用不同的样式:

Document document = new Document(pdfDocument))
List qaList = new List();

ListItem item = new ListItem();
Paragraph paragraph = new Paragraph();
paragraph.add(new Text("Question 1? ").setBold())
         .add(new Text("Answer 1"))
         .setMarginTop(0).setMarginBottom(0);
item.add(paragraph);
qaList.add(item);
item = new ListItem();
paragraph = new Paragraph();
paragraph.add(new Text("Question 2? ").setBold())
         .add(new Text("Answer 2"))
         .setMarginTop(0).setMarginBottom(0);
item.add(paragraph);
qaList.add(item);

document.add(qaList);

StyledListItems测试testAddMultiStyledListItems

结果是

截屏


顺便说一句,你为什么

得到这个 (com.itextpdf.layout.element.Text@73df99a1) 代替粗体文本

是在

qaList.add(new ListItem(new Text("Question 1?").setBold() + "Answer 1"));

你实际上执行了一个String连接,

new Text("Question 1?").setBold() + "Answer 1"

toString()对结果对象的调用new Text("Question 1?").setBold()和对这个 String 的调用增加了"Answer 1".


推荐阅读