java如何在一个元素中包装多个段落?
我正在使用iText 5用Java创建一个相当复杂的PDF文档。我向文档中添加了一堆Paragraph
对象。为了提高代码的可读性,我想创建多个方法来创建文档的不同方面
我可以使用什么类型在一个单元中包装多个Paragraph
对象,以便从子方法返回它们?Element
类没有add()
方法,Chunk
类也没有
我试过Phrase
,但后来我失去了所有的换行符。将我的Paragraph
对象包装到另一个Paragraph
对象中会产生所需的输出,但这感觉很奇怪,我担心包装段落可能会在文档中引入额外的边距
那么,为了对Paragraph
对象进行逻辑分组,包装它们的最佳类型是什么呢
代码示例
我当前的代码:
Document doc = new Document(...);
doc.add(new Paragraph("Aspect A.1"));
doc.add(new Paragraph("Aspect A.2"));
doc.add(new Paragraph("Aspect A.3"));
doc.add(new Paragraph("Aspect B.1"));
doc.add(new Paragraph("Aspect B.2"));
我的奋斗目标是:
Document doc = new Document(...);
doc.add(createAspectA());
doc.add(createAspectB());
// ...
private WrapperElement createAspectA() {
WrapperElement wrapper = new WrapperElement(...);
wrapper.add(new Paragraph("Aspect A.1"));
wrapper.add(new Paragraph("Aspect A.2"));
wrapper.add(new Paragraph("Aspect A.3"));
return wrapper;
}
private WrapperElement createAspectB() {
WrapperElement wrapper = new WrapperElement(...);
wrapper.add(new Paragraph("Aspect B.1"));
wrapper.add(new Paragraph("Aspect B.2"));
return wrapper;
}
# 1 楼答案
虽然这确实让人感到奇怪,但它确实有效,并且是代码中明确考虑的一个用例。(例如,查看
Paragraph.breakUp()
的代码和继承的Phrase.process(ElementListener).
)只有当你要求它(使用
setIndentationLeft(float)
/setIndentationRight(float)
/setSpacingAfter(float)
/setSpacingBefore(float)
)时,它才会这样做。因此,您可以使用选项添加额外的缩进,但您不会不情愿地使用不需要的额外缩进另一方面,如果您想100%确定不会有任何不必要的影响,只需返回一个有序的
Iterable<Element>
,例如ArrayList<Element>
,然后将添加到文档的调用更改为forEach
:替换
由
(不幸的是
doc.add
抛出带标记的异常,否则可能是createAspectA().forEach(doc::add)
。)