为什么Java在转换为PDF期间会删除段落之间的空白区域?

问题描述 投票:1回答:1

为什么Java删除段落之间的空格?我正在使用iText5将.rtf文件转换为PDF格式。该文件包含报告,每个报告都在其自己的页面上。转换后,段落之间的空格被删除,使得分页与转换前的分页不同。

我尝试使用Rectangle来设置页面大小,但由于报告的行数不同,因此某些报告仍与其他报告共享同一页面。

//Set PDF layout
//Rectangle rectangle = new Rectangle (0, 0, 1350, 16615);
Document document = new Document(PageSize.A4.rotate());
document.setMargins(13, 0, 10, 10);           
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();

br = new BufferedReader(new FileReader(TEXT));

String line;
Paragraph p;       
//PDF font configuration
Font normal = new Font(FontFamily.COURIER, 5);
Font bold = new Font(FontFamily.COURIER, 5, Font.BOLD);

//add page to PDF       
boolean title = true;
    while ((line = br.readLine()) != null) {               
    p = new Paragraph(line, title ? bold : normal);
        document.add(p);
     }           
        document.close();

我不希望程序删除段落之间的空格。

java itext pdf-generation
1个回答
0
投票

First off

我怀疑你的输入真的是一个rtf文件。 rtf文件看起来像这样

{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard
This is some {\b bold} text.\par
}

(来自Wikipedia about Rich Text Format

如果您将该文件提供给您的代码,您会得到类似的结果

screen shot

这可能不是你想要的。

因此,我们假设您的输入是纯文本,您可以逐行阅读。

How to prevent dropped empty lines

请注意,由空字符串构造的Paragraph几乎不需要垂直空间,例如

doc.add(new Paragraph("1 Between this line and line 3 there is an empty paragraph."));
doc.add(new Paragraph(""));
doc.add(new Paragraph("3 This is line 3."));
doc.add(new Paragraph("4 Between this line and line 6 there is a paragraph with only a space."));
doc.add(new Paragraph(" "));
doc.add(new Paragraph("6 This is line 6."));

EmptyParagraphs测试testEmptyParagraphsForFazriBadri

结果是

screen shot

观察到有效地丢弃了第2行。

原因是Paragraph(String string)构造函数是一个方便的捷径,

p = new Paragraph(string);

基本上相当于

p = new Paragraph();
if (string != null && string.length() != 0) {
    p.add(new Chunk(string));
}

因此,对于new Paragraph(""),段落中没有添加任何块,它是空的,其块不需要垂直空间。

在这种情况下,您可以开始使用段落本身的LeadingSpacingBeforeSpacingAfter或周围的段落,但最简单的方法肯定是用包含空格""的字符串替换空字符串" "

在你的情况下,可以通过替换来完成

while ((line = br.readLine()) != null) {               
    p = new Paragraph(line, title ? bold : normal);
    document.add(p);
}           

通过

while ((line = br.readLine()) != null) {               
    p = new Paragraph(line.length() == 0 ? " " : line, title ? bold : normal);
    document.add(p);
}           
© www.soinside.com 2019 - 2024. All rights reserved.