10

HTML レポートがあり、各印刷ページには<div class="page">. ページ クラスは次のように定義されます。

width: 180mm;
height: 250mm;
page-break-after: always;
background-position: centre top;
background-image: url(Images/MainBanner.png);
background-repeat: no-repeat;
padding-top: 30mm;

レポート コンテンツにいくつかの変更を加えた後、レポートを PDF に変換するために abcPDF を呼び出すと、実際のレポート ページごとに空白のページが突然挿入されます。この問題を取り除くために行った変更をロールバックしたくないので、余分なページが挿入されている理由を誰かが知っていることを願っています.

4

9 に答える 9

8

私はまったく同じ問題を経験しました。空のページは、page-break-afterによるものです:常に; CSSで。ABCpdfだけでなく、印刷されたものも余分なページを吐き出します。そこで、次のコードを使用して最後のページを削除しました 。MyDoc.Delete(MyDoc.Page);

ただし、これは別の種類の問題につながります。IE 8を搭載した開発サーバーでは余分な空白ページが表示され、IE6を搭載した本番サーバーでは余分な空白ページは表示されません。そこで、websupergooのサポートチームにメールを送信して、空白のページを探す方法を教えてもらいました。アイデアは、PDFを繰り返し処理し、すべての空白ページを識別し、上記のロジックを使用してそれらを削除することです。

そして、私はJakkwyldeの意見を2番目にしています。Websupergooの人々は非常に役に立ち、迅速に対応します。ABCpdfを64ビットで動作させるのに別の問題があり、それを理解するためにほぼ1日を費やしていました。彼らは私が試すことができる複数のシナリオを私に提供してくれました。彼らのサポートはお金に見合ったもので、私は数分でアプリを立ち上げて実行しました。

于 2010-03-15T23:24:12.290 に答える
4
protected void RemoveBlankPages(Doc pdf)
{
    for (int i = pdf.PageCount; i > 0; i--)
    {
        pdf.PageNumber = i;

        //get the pdf content
        string textContent = pdf.GetText("Text");

        //delete the page if it is blank
        if (string.IsNullOrEmpty(textContent))
            pdf.Delete(pdf.Page);
    }
}
于 2012-09-07T18:46:26.480 に答える
2

AddImageUrl再検討する価値のあることの1つは、メソッドを使用している場合のHTMLマークアップの有効性です。レンダリングされたPDFが期待どおりでない場合は、マークアップの不良、タグの無効化などが原因である可能性があります。

WebSuperGooは、その価値について優れたサポートを提供し、異常が発生した場合に優れた応答を提供します。多くの場合、ソースコードを送信すると、回避策をアドバイスしたり、実装の代替案を提供したりできます。

于 2010-03-11T03:18:31.580 に答える
2

abcPDF は奇妙で予測不可能であることがわかりました。そうは言っても、ページサイズと改ページ後の組み合わせが原因である可能性があります。ページの高さを減らすか、改ページを削除してください。

于 2010-03-04T14:20:10.183 に答える
0

ABCPDFのAddImageURL()メソッドは、必要な領域内に html をしっかりとレンダリングしない疎バインド メソッドであり、新しい空白ページが発生します。

AddImageHTML()メソッドを使用して、目的の HTML を PDF に変換してみてください。

Doc theDoc = new Doc();
theDoc.Page = theDoc.AddPage();

int theID = 0;
theDoc.SetInfo(0, "CheckBgImages", "1");
theDoc.SetInfo(0, "RenderDelay", "5000");
theDoc.HtmlOptions.Engine = EngineType.MSHtml;
theID = theDoc.AddImageHtml(HTML);

while (true)
{
 if (!theDoc.Chainable(theID))
                break;
            theDoc.Page = theDoc.AddPage();
            theID = theDoc.AddImageToChain(theID);
        }

        for (int i = 0; i <= theDoc.PageCount; i++)
        {
            theDoc.PageNumber = i;
            theDoc.Flatten();
        }

        theDoc.Save(HttpContext.Current.Server.MapPath(Path));
        theDoc.Clear();

常に正確な結果が得られます。

于 2012-07-16T11:09:15.577 に答える
0

最後のページで改ページを避けるために、私はこのようなことをしましたが、うまくいきました。

最後のページに page-break-after がないことを確認しました。これは常に、angularJS などの任意のテンプレートまたはフロントエンド フレームワークで実行できますが、この例ではブレード テンプレートを使用します (ただし、任意の php を使用します。 ..)

@if ($last_page)
   <div class='footer last-page'>
@else
   <div class='footer'>

そして、私はスタイルシートにこれを持っています

.footer {
    page-break-after:always;
}

.last-page {
    page-break-after:avoid;
}
于 2015-01-06T15:25:04.220 に答える
0

Kush は、「まったく同じ問題を経験しました。空のページは、CSS の page-break-after: always; が原因です。ABCpdf だけでなく、印刷物も余分なページを吐き出します。」という点で正しいです。

div に "page-break-after:always" がある場合、IE は文字通り常に新しいページを開始し、何も追加されていない場合は空白で印刷されます。Firefox にはありません。

abcpdf は IE8s レンダリング エンジンを使用するため、空白のページが作成されます。OP の目的で、明示的な高さを使用するだけで問題が解決し、エンジンが改ページを挿入します。

コンテンツが2ページかかる場合があるため、高さを明示的に設定できない同様の問題を解決しようとしています。(各ページは 1 人に対応し、各人は印刷時に新しいページから開始する必要があります)。空のページを検出するためのハック修正があるかどうかを確認するために abcpdf にもメールを送信しましたが、空の場合に最終ページを印刷しないように、根本的な問題を修正し、CSS で IE8 をハックする方法を誰かが知っているかどうか興味がありました。それは不可能だと思いますが、明らかな何かを見落としていないことを確認したかったのです。

于 2010-04-30T19:38:47.620 に答える