Java 应用于段落的itext spacingBefore属性导致新页面
我对itext库有如下问题: 我想在第二段中使用spacingBefore属性在两段之间放置一个垂直空格 问题在于,从一定的空间单位值(默认为点单位)来看,itext会导致第二段显示在新页面上,即使明显有足够的空间将这两段放在同一页面上 此代码说明了这种情况:Java 应用于段落的itext spacingBefore属性导致新页面,java,pdf,itext,Java,Pdf,Itext,我对itext库有如下问题: 我想在第二段中使用spacingBefore属性在两段之间放置一个垂直空格 问题在于,从一定的空间单位值(默认为点单位)来看,itext会导致第二段显示在新页面上,即使明显有足够的空间将这两段放在同一页面上 此代码说明了这种情况: public static void main(String[] args) throws Exception { Document document = new Document(); OutputS
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();
}
有人解释过这种奇怪的行为吗
提前感谢我已将您的代码复制到一个独立的示例中。您可以在此处找到此示例: 我不认为这与你所做的有什么不同,但在我的例子中,这两段是在同一页上。请自己查一下 可能您也在
第1段
之前应用了空格,或者您使用的是旧版本的iText(例如2.1.7,一个已过时且不应再使用的版本),或者您使用的是非正式版本的iText(例如iText 4,一个由第三方创建的版本,没有人知道使用它是否合法)
简而言之:这个问题无法解释,因为这个问题无法重现。正如Bruno所说,我使用的是2012年发布的itext:5.1.2的“旧”错误版本。这个错误由5.5.1版本修复,如变更日志中所述: 修正了创建新页面前后的间距问题
当使用新版本时,一切正常:)请随意接受答案(您的或我的),这样人们就可以看到问题已经解决。
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();
}