ABCPDF6问题:“HTML渲染为空”,但网页输出正常。

9
就像标题所述,我们正在使用ABCPdf6从XSLT渲染PDF。 一切都运行良好,但现在我们遇到了一个错误,指出“HTML渲染为空白”。 使用浏览器(在IE / Firefox / Chrome上测试)我能够浏览生成的HTML(格式化的XSL),并且它在浏览器中显示得非常好。 ABCPDF6无法转换该文件。 我已经尝试将控制权交给输出XSL的页面,但仍然出现此错误。
有没有人有ABCPdf的经验,并遇到过这种情况? 代码之前一直正常工作,而使用完全相同的生成代码的另一页(甚至指向输出HTML的相同占位符页面!)也正常工作。

我有完全相同的问题,你能解决吗?我几乎可以确定这个问题是在我们对2008服务器运行Windows更新之后出现的。 - Andreas
事实证明,这个问题与ABCPDF完全无关。我不知道为什么会出现这个问题。很抱歉我不能为你提供更多的帮助。 - Wayne Molina
这个链接解决了我遇到的同样问题。 - Anicho
4个回答

16

我现在知道我的问题所在了。 当我在我的2008服务器上运行Windows更新时,安装了Internet Explorer 9。 IE 9有一种不同的HTML渲染方式,这会破坏abcPDF。 更新到最新版本(8)解决了我所有的问题。在这个版本中,你也可以尝试另一个HTML引擎叫做Gecko。

虽然你已经解决了你的问题,如果其他人遇到这个错误,我建议你安装试用版,并尝试使用最新版本。


我假设你指的是abcPDF 8版本,而不是IE 8版本。另外,有趣的小知识:Gecko是Mozilla渲染引擎,所以它应该类似于Firefox。 :) - djdanlib
有没有办法在不使用Gecko渲染引擎的情况下解决这个问题?我们在一些软件中内置了ABCPdf作为第三方组件,这个问题让我很恼火,因为我无法直接更改任何内容。ABCPdf太烂了。 - Oleksandr

3

我在使用AbcPdf4.0的Windows 7电脑上遇到了同样的错误。在进行微软更新时,IE8被升级到了IE10。通过卸载IE10来解决了这个问题。

注意:Abcpdf4.0不支持IE9及以上版本。要么升级Abcpdf,要么卸载最新的IE。


1
今早我遇到了与AbcPdf9相似的问题。我添加了代码来测试引擎类型,GECKO可以工作,然后我又切换回MSHTML,它仍然能够工作。因此这只是一个暂时性的问题。
以下是指定引擎类型的方法:
using (var document = new Doc())
{
    document.HtmlOptions.Engine = EngineType.Gecko;
    ...
    ...
}

这段代码调用将HTML转换为PDF的方法,但如果必要的话会再次调用该方法,因为它只会失败一次:
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;
                ...
                ...

如果您有建议或不同的解决方案,请留下评论。

-1
在 regedit 中使用以下步骤:
1) HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 2) 创建一个 DWORD 32 位的键
3) 将其重命名为 "w3wp.exe"
4) 设置值数据为 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接