iText(夏普) - 如何避免创建空白页?

时间:2016-08-19 15:00:58

标签: itext

我正在使用iTextSharp版本5.5.7生成PDF文档,使用他们的“流”模式 - 我的意思是我没有指定每一段文本的位置,我只是在文档中添加段落让iTextSharp找出绘制它们的位置。我输出的文本是报告生成器的结果,因此每次都不同。

我遇到的问题是:想象一下,考虑到页面大小和所选字体,我可以在页面上放置40行文本。我输出40段,然后我输出一个空白的段落(contents =“”),然后输出一个填满整个页面的图像。 iTextSharp正是我所说的 - 我最终得到一页文字,一页空白,然后是一页包含我的图片。

但现在我的文档看起来很有趣 - 在所有内容中都有这个意想不到的空白页面。

我不能只说“不输出任何空白行”,因为当然只有20行文字后才会显示空行,在这种情况下它必须在那里。我需要一些方法告诉iTextSharp“仅当它不是页面上的唯一内容时才包含此段落”或者以某种方式检测到OnEndPage()中的页面是空白的并且抑制其输出(不会搞砸我的页码)。 / p>

关于我如何做到这一点的任何建议?

稍后添加

报告生成器的输出:

<html>
<p>Information header</p> 
<p>Detail</p>
<p>Detail</p>
<p>Detail</p>
<p></p>  <!-- Blank line inserted by report generator for clarity -->
<p>Information header</p>
<p>Detail</p>
<p>Detail</p>
<p>Detail</p>
...
<p>Detail</p>  <!-- just by random happenstance this is the last line that will fit on the first page -->
<p></p>   <!-- This line happens to be blank, I have no control over it -->
<img src="blah blah"></image>

我的(伪)代码:

foreach (HtmlNode node in htmlFromReportGenerator)
{
   if (node is text)
      pdfDoc.Add(new Paragraph(node.text));
   else if (node is image)
      pdfDoc.Add(new Image(node.image));
}

1 个答案:

答案 0 :(得分:1)

按照布鲁诺的建议,我的(伪)代码现在看起来像这样:

Paragraph lastParagraph = null;
foreach (HtmlNode node in htmlFromReportGenerator)
{
   if (node is text)
   {
      Paragraph parg = new Paragraph(node.text);
      if ( (lastParagraph != null) && (text.Trim().Length == 0) )
         lastParagraph.SpacingAfter += parg.Leading;
      else
      {
         pdfDoc.Add(parg);
         lastParagraph = parg;
      }
   }
   else if (node is image)
   {
      pdfDoc.Add(new Image(node.image));
      lastParagraph = null;
   }
}