如何将多个段落包装在一个元素中?
How to wrap multiple paragraphs in one element?
我正在使用 iText 5 在 Java 中创建一个相当复杂的 PDF 文档。我向我的文档添加了一堆 Paragraph
对象。为了提高代码的可读性,我想创建多种方法来创建文档的不同方面。
我可以使用什么类型将多个 Paragraph
对象包装在一个单元中,这样我就可以从我的子方法中 return 它们? Element
class 没有 add()
方法,Chunk
class.
也没有
我尝试了 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;
}
Wrapping my Paragraph
objects in another Paragraph
object produces the desired output, but it feels odd
虽然这确实让人觉得奇怪,但它确实有效并且是代码中明确考虑的一个用例。 (比如看Paragraph.breakUp()
的代码和继承的Phrase.process(ElementListener).
)
and I fear that the wrapping paragraph might introduce additional margins in the document
它仅在您要求时执行(使用 setIndentationLeft(float)
/ setIndentationRight(float)
/ setSpacingAfter(float)
/ setSpacingBefore(float)
)。因此,您可以选项添加额外的缩进,但您不会不情愿地接受不需要的额外缩进。
另一方面,如果您想 100% 确定不会有任何不必要的影响,您可以简单地 return 一个有序的 Iterable<Element>
,例如ArrayList<Element>
,并将添加到文档更改为 forEach
调用:
private Iterable<Element> createAspectA() {
ArrayList<Element> wrapper = new ArrayList<>();
wrapper.add(new Paragraph("Aspect A.1"));
wrapper.add(new Paragraph("Aspect A.2"));
wrapper.add(new Paragraph("Aspect A.3"));
return wrapper;
}
并替换
doc.add(createAspectA());
来自
for (Element e : createAspectA()) doc.add(e);
(不幸的是 doc.add
抛出标记异常,否则它可能是 createAspectA().forEach(doc::add)
。)
我正在使用 iText 5 在 Java 中创建一个相当复杂的 PDF 文档。我向我的文档添加了一堆 Paragraph
对象。为了提高代码的可读性,我想创建多种方法来创建文档的不同方面。
我可以使用什么类型将多个 Paragraph
对象包装在一个单元中,这样我就可以从我的子方法中 return 它们? Element
class 没有 add()
方法,Chunk
class.
我尝试了 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;
}
Wrapping my
Paragraph
objects in anotherParagraph
object produces the desired output, but it feels odd
虽然这确实让人觉得奇怪,但它确实有效并且是代码中明确考虑的一个用例。 (比如看Paragraph.breakUp()
的代码和继承的Phrase.process(ElementListener).
)
and I fear that the wrapping paragraph might introduce additional margins in the document
它仅在您要求时执行(使用 setIndentationLeft(float)
/ setIndentationRight(float)
/ setSpacingAfter(float)
/ setSpacingBefore(float)
)。因此,您可以选项添加额外的缩进,但您不会不情愿地接受不需要的额外缩进。
另一方面,如果您想 100% 确定不会有任何不必要的影响,您可以简单地 return 一个有序的 Iterable<Element>
,例如ArrayList<Element>
,并将添加到文档更改为 forEach
调用:
private Iterable<Element> createAspectA() {
ArrayList<Element> wrapper = new ArrayList<>();
wrapper.add(new Paragraph("Aspect A.1"));
wrapper.add(new Paragraph("Aspect A.2"));
wrapper.add(new Paragraph("Aspect A.3"));
return wrapper;
}
并替换
doc.add(createAspectA());
来自
for (Element e : createAspectA()) doc.add(e);
(不幸的是 doc.add
抛出标记异常,否则它可能是 createAspectA().forEach(doc::add)
。)