iText(Sharp)-如何避免创建空白页?
我正在使用iTextSharp 5.5.7版生成一个PDF文档,使用他们的“流”模式——我的意思是我没有指定每一段文本的位置,我只是在文档中添加段落,让iTextSharp知道在哪里绘制它们。我输出的文本是报表生成器的结果,因此每次都不同 我遇到的问题是:想象一下,给定页面大小和所选字体,我可以在一个页面上容纳40行文本。我输出40个段落,然后输出一个空白段落(contents=“”),然后是一个填充整个页面的图像。iTextSharp完全按照我说的去做——我最后看到一页全是文本,一页空白,然后是一页包含我的图像 <>但是现在我的文档看起来很有趣——在所有的中间都有一个出乎意料的空白页。 我不能只说“不要输出任何空行”,因为空行可能只显示在20行文本之后,在这种情况下它必须在那里。我需要一些方法来告诉iTextSharp“仅当它不是页面上的唯一内容时才包含此段落”,或者以某种方式在OnEndPage()中检测到该页面为空白,并抑制其输出(而不会弄乱我的页码) 有没有关于我如何做到这一点的建议 后来添加 报告生成器的输出:iText(Sharp)-如何避免创建空白页?,itext,Itext,我正在使用iTextSharp 5.5.7版生成一个PDF文档,使用他们的“流”模式——我的意思是我没有指定每一段文本的位置,我只是在文档中添加段落,让iTextSharp知道在哪里绘制它们。我输出的文本是报表生成器的结果,因此每次都不同 我遇到的问题是:想象一下,给定页面大小和所选字体,我可以在一个页面上容纳40行文本。我输出40个段落,然后输出一个空白段落(contents=“”),然后是一个填充整个页面的图像。iTextSharp完全按照我说的去做——我最后看到一页全是文本,一页空白,然后
<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>
按照Bruno的建议,我的(伪)代码现在如下所示:
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;
}
}
你为什么用肮脏的手段插入空白页?肮脏的把戏有肮脏的副作用。请参阅以了解如何添加空白页。你不应该期望Stack Overflow上的人员给出另一个答案,因为你没有提供任何代码让我们重现你的问题。我重新阅读了你的问题(它的措辞非常混乱),也许你不想在40段和图片之间添加空白页。也许你正在使用添加空白段落的肮脏技巧,因为你想在文本和图像之间引入一些空格。在任何情况下,一个有那么多文本且没有示例代码的问题都不是一个好的堆栈溢出问题。无论如何:如果页面为空,iText将忽略
document.newPage()
。如果你想引入一个空白页,你必须做出特别的努力。声明中有一个出乎意料的空白页,中间的一切都不清楚。你真的应该多做些努力来解释这个问题。@BrunoLowagie希望伪代码能增加一些清晰度。基本上,我接收到的信息是文本和图像的混合。我正在获取这些信息并从中生成PDF文档。我没有调用document.newPage(),我根本没有尝试插入空白页。在这种特殊情况下,空白行恰好在新页的起始处落下,接着是一个大的图像。如果检查空白行,则添加另一个<代码>。抑制它们,并确保为下一个段落定义setpacingbefore
。
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;
}
}