使用abcpdf更改特定页面的插入内容

时间:2013-04-08 09:17:57

标签: c# asp.net .net abcpdf

我使用abcpdf从html字符串创建pdf。以下代码段显示了我的方式:

var pdfDocument = new Doc();
pdfDocument.Page = pdfDocument.AddPage();

pdfDocument.Font = pdfDocument.AddFont("Times-Roman");
pdfDocument.FontSize = 12;

var documentId = pdfDocument.AddImageHtml(innerHtml);
var counter = 0;

while (true)
{
    counter++;
    if (!pdfDocument.Chainable(documentId))
    {
        break;
    }


    pdfDocument.Page = pdfDocument.AddPage();

    // how to add a inset of 20, 0 on every page after the second? The following 2lines don't affect the pdf pages
    if (counter >= 3)
        pdfDocument.Rect.Inset(20, 0);                

    documentId = pdfDocument.AddImageToChain(documentId);
}

在AddPage之后我想为每个页面添加一个新插图,其中pagenumber> 2

提前致谢

2 个答案:

答案 0 :(得分:0)

我可以向您保证,您的插入通话将产生效果。尝试在每个页面上调用FrameRect,然后你就可以看到它了。

那么为什么你没有看到你期望的效果呢?

您的HTML在调用AddImageUrl / HTML时具有固定的宽度。随后对AddImageToChain的每次调用都使用此固定宽度。

如果在“嵌入”页面中减少了页面区域的高度,您将获得截断到该高度的页面的下一个块。

如果在“插入”页面中减少了区域的宽度,则事情变得更加困难。宽度是固定的,因此无法更改。相反,ABCpdf将缩小页面以使其适合。

因此,如果您将宽度从600点减少到580点,则此内容的比例因子将为580/600 = 97%。

这很可能是发生了什么,但由于比例因子很小,你没有注意到它。

我在ABCpdf上工作,我的回复可能包含基于ABCpdf的概念。这就是我所知道的。 : - )

答案 1 :(得分:0)

来自SwissCoder的评论#1是对的。 AddImageHtml已添加第一页。在联系WebSuperGoo支持后,他们建议我使用PageCountDoc

while (true)
{
    if (!pdfDocument.Chainable(documentId))
    {
        break;
    }

    pdfDocument.Page = pdfDocument.AddPage();

    if (pdfDocument.PageCount >= 3)
        pdfDocument.Rect.Inset(0, 20);
    documentId = pdfDocument.AddImageToChain(documentId);
}

另一个解决方案是将索引调整为required pagenumber - 1,因为ÀddImageHtml已将第一页添加到文档中。