我正在尝试使用abcPdf创建PDF格式的报告。一切正常,但我想在每页的底部添加页码和页边距,并避免在图片中看到的连续中间切割:
var theDoc = new Doc { TopDown = true };
var pageRef = theDoc.AddImageUrl(pdfUrl, true, 1903, true);
while (theDoc.Chainable(pageRef))
{
theDoc.Page = theDoc.AddPage();
//I guessI have to do something here???
pageRef = theDoc.AddImageToChain(pageRef);
}
有人知道是否有可能吗?
答案 0 :(得分:27)
它确实有效,但我认为AbcPdf正在使用IE的HTML呈现,所以你能做的最好的事情是手动设置渲染引擎为gecko(不要忘记你需要和额外的DLL)或者更新你的IE网络服务器。
theDoc.HtmlOptions.Engine = EngineType.Gecko;
然后添加分页符只需使用
<div style="page-break-before:always"> </div>
感谢费希拉的评论。
答案 1 :(得分:10)
ABCpdf包括两个HTML呈现引擎。
MSHTML基于Trident,产生的输出大致类似于系统上安装的IE版本。
Gecko以Firefox为基础,截至2013年6月将产生与Firefox 21中大致类似的输出。
您可以使用Doc.HtmlOptions.Engine属性在两个引擎之间切换。
两个引擎都支持分页CSS样式。您可以使用以下内容:
<div style="page-break-before:always">some text</div>
<div style="page-break-after:always">some text</div>
<div style="page-break-inside:avoid">some text</div>
请注意,page-break-inside是对基本MSHTML行为的补充。
两个引擎对这些结构的处理略有不同。一般来说,MSHTML更加宽容和直观。如何应用样式的元素必须是可见的才能工作。
因此,如果样式不会在您期望的位置产生中断,最简单的调试方法是将边框样式应用于元素,以便您可以看到中断的位置。这通常会使问题的原因显而易见。
Gecko引擎中的分页符样式并不总是像在MSHTML中一样直观地应用。其根源是CSS规范,该规范说断点样式必须适用于“根元素的正常流”中的块级元素。它允许将这些样式应用于其他元素,但不强制要求它。
在Gecko引擎中,结果是页面分隔样式不能在表格中应用于表格行等元素。如果您不确定某些内容是否可行,只需在Firefox 21.0中尝试打印预览作为简单的完整性检查。
答案 2 :(得分:2)
有一种更好的解决方法。您可以在html的容器(即<div />
,CSS
等)上放置<div />
属性,而不是将此<table />
强制分页。在css中将page-break-inside
设置为auto
。
// in CSS
#ContainerID
{
page-break-inside: auto;
}
答案 3 :(得分:0)
是的我已经处理过这个问题,我们通过在表格中添加一行并通过检查html与矩形的高度来确定它是否仍适合页面来解决它。
一旦所有设置都很好用,但速度稍慢