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

Posted

技术标签:

【中文标题】如何使用 iText 列表将具有不同权重的文本添加到单个 ListItem【英文标题】:How to add text with different weights to a single ListItem using iText List 【发布时间】:2019-01-02 21:55:18 【问题描述】:

我使用 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();

【问题讨论】:

【参考方案1】:

您可以在 iText 7 ListItem 中应用不同的样式,方法是显式创建一个包含不同样式的 Paragraph 并将该段落添加到列表项中:

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"

调用new Text("Question 1?").setBold() 的结果对象的toString(),并将"Answer 1" 添加到此字符串。

【讨论】:

是的,这行得通。我实际上尝试过基本上相同的事情,但它没有工作testList.add(new ListItem().add(new Paragraph().add(new Text("Bold").setBold()).add(" not Bold"))); 当我测试一些东西时,我尽量不要过多地使用流体符号;它看起来很紧凑,但更难调试。 感谢您的提示。【参考方案2】:

iText 7 中似乎没有允许在 ListItem 中使用多种字体的功能。我通过放弃列表并为每个列表项使用一个段落来解决我的问题。

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

Paragraph qaItem1 = new Paragraph().add(new Text("Question 1?").setBold()).add("Answer 1"));
Paragraph qaItem1 = new Paragraph().add(new Text("Question 1?").setBold()).add("Answer 1"));

document.add(qaItem1);
document.add(qaItem2);

document.close();

【讨论】:

以上是关于如何使用 iText 列表将具有不同权重的文本添加到单个 ListItem的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 iText 为我的 (pdf-) 文本添加背景颜色以使用 Java 创建它

如何使用 iText 将没有所有者密码的仅用户密码添加到 PDF

如何使用 iText 7 使下划线文本可访问

使用 iTextSharp 添加水印文本时,PAC 工具中出现 iText 7 警告

如何从SharedPreferences文件中正确地将文本附加到TextView而不是覆盖它?

将未知大小的实例类型和权重容量列表添加到 AWS CF 模板 (YAML) 中的 Auto Scaling 组