当使用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,因为这是我们的许可证。
修改:
我错过了.external
和ABCpdf_RenderWait()
来电的ABCpdf_RenderComplete()
。如果你正确地引用它们(想象一下)它是有效的:
doc.HtmlOptions.OnLoadScript = @"
window.external.ABCpdf_RenderWait();
window.external.ABCpdf_RenderComplete();";
虽然正如我在回答中提到的那样,IE也需要很多安全箍。
答案 0 :(得分:0)
所以我实际上没有让IE引擎以我想要的方式执行JavaScript,但我能够找到使用Gecko引擎的解决方案。原始的NuGet安装不包括Gecko DLL,所以我刚刚下载了独立安装并手动添加了DLL。
之后,一切都按预期完成。
我认为IE引擎无法正常工作,因为它需要大量的安全配置,因为常见问题解答会花费大量时间讨论安全性调试:http://www.websupergoo.com/support.htm#6.7