我正在使用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));
}
答案 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;
}
}