如何使用 iText 列表将具有不同权重的文本添加到单个 ListItem

rlw*_*ler 1 java pdf-generation itext itext7

我使用 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();
Run Code Online (Sandbox Code Playgroud)

mkl*_*mkl 6

您可以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);
Run Code Online (Sandbox Code Playgroud)

StyledListItems测试testAddMultiStyledListItems

结果是

截屏


顺便说一句,你为什么

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

是在

qaList.add(new ListItem(new Text("Question 1?").setBold() + "Answer 1"));
Run Code Online (Sandbox Code Playgroud)

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

new Text("Question 1?").setBold() + "Answer 1"
Run Code Online (Sandbox Code Playgroud)

对这个 StringtoString()的结果对象的调用new Text("Question 1?").setBold()"Answer 1".