gpt4 book ai didi

java - 为什么Java在转换为PDF时会删除段落之间的空白?

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:32 25 4
gpt4 key购买 nike

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

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

//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();

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

最佳答案

首先

我怀疑您的输入确实是一个 rtf 文件。 rtf 文件如下所示

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

(来自 Wikipedia about Rich Text Format )

如果您将该文件输入代码中,您会得到类似的内容

screen shot

这可能不是您想要的。

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

如何防止空行丢失

请注意,从空字符串构造的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("") 没有向段落添加任何 block ,它是空的,其 block 不需要垂直空间。

在这种情况下,您可以开始尝试使用段落本身或周围段落的 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);
}

关于java - 为什么Java在转换为PDF时会删除段落之间的空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com