ABCPdf给出“;无法呈现HTML.无法应用JScript“;即使使用简单的OnLoadScript

ABCPdf giving "Unable to render HTML. Unable to apply JScript" even with simple OnLoadScript

本文关键字:OnLoadScript 简单 HTML 给出 ABCPdf 应用 JScript      更新时间:2023-09-26

当使用ABCPdf将页面呈现为PDF时,我正在尝试进行一些简单的DOM操作。我遵循了他们在这里记录的内容:http://www.websupergoo.com/helppdf9net/source/5-abcpdf/xhtmloptions/2-properties/usescript.htm

但当我尝试以下简单的东西时:

var doc = new Doc();
doc.HtmlOptions.UseScript = true;
doc.HtmlOptions.UseNoCache = true;
doc.HtmlOptions.PageCachePurge();
doc.HtmlOptions.OnLoadScript = @"var reportElms = document.getElementsByClassName(""report"");";
doc.Page = doc.AddPage();
doc.AddImageUrl(Url.Action("TestPdf", "Pdf", new { }, "http"));

我得到了一个例外:

Unable to render HTML. Unable to apply JScript.
COM error 80020101.
Script 'var reportElms = document.getElementsByClassName("report");'.

有没有想过我做错了什么?

即使是内置功能也无法工作

我甚至在下面的脚本中得到了同样的异常:

doc.HtmlOptions.OnLoadScript = @"
    window.ABCpdf_RenderWait(); 
    window.ABCpdf_RenderComplete();";

顺便说一句,我使用的是版本8,因为这是我们的许可证。

编辑:

我错过了ABCpdf_RenderWait()ABCpdf_RenderComplete()调用的.external。如果你正确地引用它们(想象一下),它就会起作用:

doc.HtmlOptions.OnLoadScript = @"
    window.external.ABCpdf_RenderWait(); 
    window.external.ABCpdf_RenderComplete();";

尽管正如我在回答中所提到的,IE也需要跳过许多安全障碍。

所以我实际上并没有让IE引擎以我想要的方式执行JavaScript,但我能够使用Gecko引擎找到解决方案。最初的NuGet安装不包括Gecko DLL,所以我只是下载了独立安装并手动添加了DLL。

在那之后,一切都如愿以偿。

我认为IE引擎不起作用,因为它需要大量的安全配置,因为常见问题解答花了大量时间讨论安全调试:http://www.websupergoo.com/support.htm#6.7