java - 如何使用 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();
解决方案
您可以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"
.
推荐阅读
- android - 无法解决:support-v4
- javascript - 传递多个字段值并通过 HTML 链接提交
- bash - 如何找到我在 ubuntu 上升级节点的时间?
- javascript - 用于聊天应用程序的 Mongodb 架构
- java - 等效的 lambda 表达式,用于获取列表中每个对象的属性
- php - Laravel 计数车辆 W/O 图像
- mysql - 使用命令提示符执行 MySQL 存储过程的命令
- gradle - 未解决的参考:Gradle Kotlin DSL 的 sourceSets
- lua - Lua url 模式匹配
- r - 将二维密度轮廓添加到ggplot2中的连接线