为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3242003 2022-09-14 18:00:33
为什么 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 configurationFont 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();我不希望程序删除段落之间的空格。
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

首先

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


{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard

This is some {\b bold} text.\par

}

(来自维基百科关于富文本格式)


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

//img1.sycdn.imooc.com//6321a65c0001364d04680083.jpg

这大概不是你想要的。


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


如何防止空行掉落

请注意,从空字符串构造的字符串几乎不需要垂直空间,例如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."));

结果

//img1.sycdn.imooc.com//6321a669000131eb04680130.jpg

观察第 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);

}           


查看完整回答
反对 回复 2022-09-14
  • 1 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号