我正在使用iText 7创建一个列表。我需要有多个级别的缩进。
示例:
当前尝试:
public void IndentedList() throws IOException {
String filePath = dest + "Example2.pdf";
File file = new File(filePath);
file.getParentFile().mkdirs();
PdfWriter writer = new PdfWriter(filePath);
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
document.add(new Paragraph("iText is: ").setFont(font));
List list = new List()
.setSymbolIndent(12)
.setListSymbol("\u2022")
.setFont(font);
list
.add(new ListItem("Item 1"))
.add(new ListItem("SubItem1"))
.add(new ListItem("Sub Sub Item 1"))
.add(new ListItem("Sub Sub Item 2"));
.add(new ListItem("Item 1"))
.add(new ListItem("SubItem1"))
.add(new ListItem("Sub Sub Item 1"))
.add(new ListItem("Sub Sub Item 2"));
document.add(list);
document.close();
}
我认为应该有办法以某种方式缩进特定的列表项。
先谢谢了。
答案 0 :(得分:2)
请查看文档,更具体地说,Chapter 4教程的iText 7: Building Blocks。
目前您不是嵌套列表。您将每个列表项添加到顶级列表。您需要嵌套列表,例如:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf);
List topLevel = new List();
ListItem item1 = new ListItem();
item1.add(new Paragraph().add("Item 1"));
List secondLevel = new List();
secondLevel.add("Sub Item 1");
ListItem subItem2 = new ListItem();
subItem2.add(new Paragraph("Sub Item 2"));
List thirdLevel = new List();
thirdLevel.add("Sub Sub Item 1");
thirdLevel.add("Sub Sub Item 2");
subItem2.add(thirdLevel);
secondLevel.add(subItem2);
item1.add(secondLevel);
topLevel.add(item1);
document.add(topLevel);
document.close();
}
生成的PDF如下所示:
如您所见,子列表是缩进的,因为您向List
添加了ListItem
个对象。这是真正的嵌套。在您的代码中,您不会引入该层次结构,这就是您无法获得所需结果的原因。