0

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 のすべてのページに新しいインセットを追加したい

前もって感謝します

4

2 に答える 2

0

SwissCoder からのコメント #1 は正しかった。AddImageHtmlすでに最初のページを追加しています。WebSuperGoo サポートにも連絡したところ、PageCountclass の使用を勧められましたDoc

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

    pdfDocument.Page = pdfDocument.AddPage();

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

もう 1 つの解決策は、ドキュメントに最初のページが既に追加required pagenumber - 1されているため、インデックスを調整してカウントすることです。ÀddImageHtml

于 2013-06-18T10:41:38.447 に答える
0

あなたのはめ込み電話が効果を発揮することを保証できます。各ページで FrameRect を呼び出してみると、これを確認できるはずです。

では、期待した効果が得られないのはなぜでしょうか。

AddImageUrl/HTML を呼び出した時点で、HTML の幅は固定されています。AddImageToChain への後続の各呼び出しでは、この固定幅が使用されます。

「はめ込み」ページでページの領域の高さを減らすと、ページの次のチャンクがその高さに切り捨てられます。

「はめ込み」ページで領域の幅を減らすと、事態はさらに難しくなります。幅は固定なので変更できません。代わりに、ABCpdf はページが収まるように縮小します。

したがって、幅を 600 ポイントから 580 ポイントに減らすと、このコンテンツの倍率は 580/600 = 97% になります。

ほとんどの場合、これが起こっているのですが、スケール ファクターが小さいため、気付いていません。

私は ABCpdf に取り組んでおり、返信には ABCpdf に基づく概念が含まれている場合があります。それは私が知っていることです。:-)

于 2013-06-18T10:16:27.490 に答える