我对itext库有一个问题,可以描述如下:
我想在第二段上使用 spacingBefore 属性在两个段落之间放置一个垂直空格。
问题在于,从空间单位的某个值(默认为单位单位),itext会导致第二段显示在新页面上,即使有足够的空间将2个段落放在同一页面上。
此代码说明了这种情况:
public static void main(String[] args) throws Exception {
Document document = new Document();
OutputStream result = new FileOutputStream("output.pdf");
PdfWriter.getInstance(document, result);
document.open();
Paragraph paragraph1 = new Paragraph("First paragraph");
Paragraph paragraph2 = new Paragraph("Second paragraph");
//380 causes the new page...
paragraph2.setSpacingBefore(380f);
//...whereas 370 does not
// paragraph2.setSpacingBefore(370f);
document.add(paragraph1);
document.add(paragraph2);
document.close();
}
有人有解释这种奇怪的行为吗?
提前致谢
答案 0 :(得分:4)
我已将您的代码复制到一个独立的示例中。您可以在此处找到此示例:ParagraphSpacingBefore
public void createPdf(String filename) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
Paragraph paragraph1 = new Paragraph("First paragraph");
Paragraph paragraph2 = new Paragraph("Second paragraph");
paragraph2.setSpacingBefore(380f);
document.add(paragraph1);
document.add(paragraph2);
document.close();
}
我不认为这与你正在做的不同,但在我的情况下,这两段是在一个页面上。请检查paragraph_spacebefore.pdf以了解情况。
也许您还在paragraph1
之前应用了一个间距,或者您使用的是旧版本的iText(例如2.1.7,一个过时且不再使用的版本)或者您正在使用iText的非官方版本(例如iText 4,由第三方创建的版本,没有人知道它是否合法使用)。
简而言之:问题无法解释,因为问题无法再现。
答案 1 :(得分:2)
正如Bruno所说,我使用的是2012年发布的“旧”错误版本的itext:5.1.2。这个错误由版本5.5.1修复,如更改日志http://itextpdf.com/changelog/551中所述:
关于创建新页面之前和之后的间距的错误修正。
使用较新版本时,everthing效果很好:)