9

タイトルが示すように、ABCPdf6 を使用して XSLT から PDF をレンダリングしています。すべてが正常に機能していましたが、「HTML レンダリングが空白です」というエラーが表示されます。ブラウザー (IE/Firefox/Chrome でテスト済み) を使用すると、生成された HTML (フォーマットされた XSL) を参照でき、ブラウザーで完全に正常に表示されます。ABCPDF6 はファイルを変換できません。XSL を出力するページに制御を渡そうとしましたが、まだこのエラーが発生します。

ABCPdf の経験があり、これに遭遇したことのある人はいますか? コードは以前は問題なく正常に動作していましたが、まったく同じ生成コードを使用する別のページ ( HTML を吐き出す同じプレースホルダー ページを指していても!) は正常に動作しています。

4

4 に答える 4

16

私は今、私の場合の問題が何であったかを知っています。2008 サーバーで Windows Update を実行すると、Internet Explorer 9 がインストールされました。IE 9 には、abcPDF を妨げる HTML をレンダリングする別の方法があります。最新バージョン (8) に更新すると、すべての問題が解決しました。このバージョンでは、Gecko と呼ばれる別の HTML エンジンを試すこともできます。

問題を解決しても、他の誰かがこのエラーを受け取った場合は、試用版をインストールして最新バージョンで試してみることをお勧めします。

于 2011-10-20T13:28:27.957 に答える
1

今朝、AbcPdf9 で同様の問題が発生しました。エンジンの種類をテストするコードを追加し、GECKO が機能した後、MSHTML に戻しましたが、それでも機能しました。したがって、それは一時的な問題でした。

エンジンの種類を指定する方法は次のとおりです。

using (var document = new Doc())
{
    document.HtmlOptions.Engine = EngineType.Gecko;
    ...
    ...
}

このコードは、html を PDF に変換するメソッドを呼び出しますが、1 回しか失敗しないため、必要に応じて 2 回呼び出します。

try
{
    return GeneratePdfFromHtml(html, width, EngineType.MSHtml);
}
catch (Exception ex)
{
    /* detect this known issue, swapping the rendering engine once seems to fix it */
    if (ex.Message.ToUpper().Contains("BLANK"))
    {
        return GeneratePdfFromHtml(html, width, EngineType.Gecko);
    }
    throw;                            
}

次に、変換を行うメソッドにパラメーターを追加できます。

    public byte[] GeneratePdfFromHtml(string html, int width, EngineType engineType)
    {
        if (string.IsNullOrWhiteSpace(html)) throw new ArgumentNullException("html");
        if (width < 100) throw new ArgumentOutOfRangeException("width");

        try
        {
            using (var document = new Doc())
            {
                document.HtmlOptions.Engine = engineType;
                ...
                ...

提案や別の解決策がある場合は、コメントを残してください。

于 2014-09-19T06:06:16.690 に答える