itext spacingBefore应用于Paragraph的属性会导致新页面

时间:2015-10-05 09:56:22

标签: java pdf itext

我对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();
}

有人有解释这种奇怪的行为吗?

提前致谢

2 个答案:

答案 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以了解情况。

enter image description here

也许您还在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效果很好:)