HtmlOptions.OnLoadScript 无法使用 ABCPdf 创建 PDF
HtmlOptions.OnLoadScript doesnt works to create PDF with ABCPdf
我有一个使用 bootstrap 创建的 html 页面,我想用它创建一个 PDF,为此我正在使用 ABCPdf。
我正在尝试执行 javascript 脚本以将某些样式应用到我的 html,但它不起作用。有人知道会发生什么吗?
Doc theDoc = new Doc();
theDoc.Rect.Inset(5, 20);
theDoc.HtmlOptions.Timeout = 3000000;
theDoc.HtmlOptions.UseScript = true;
theDoc.HtmlOptions.PageCacheEnabled = false;
theDoc.HtmlOptions.DoMarkup = true;
theDoc.HtmlOptions.HostWebBrowser = false;
theDoc.HtmlOptions.Media = MediaType.Screen;
theDoc.HtmlOptions.BrowserWidth = 1500;
theDoc.HtmlOptions.AddLinks = true;
string script = @"var elemento = document.getElementById('description');"
+"for (i = 0; i < elemento.childNodes.length; i++) {"
+ "if (elemento.childNodes[i].className == 'row') {"
+ " if (elemento.childNodes[i].offsetHeight > 200) {"
+ "elemento.childNodes[i].className += ' saltoPagina'; } } }";
theDoc.HtmlOptions.OnLoadScript = script;
int theID;
theID = theDoc.AddImageUrl(url, true, 0, true);
提前致谢。 :)
解决:如果你使用的是 ABCPdf,你不能执行 javaScript(jQuery 永远不会工作)没有下一行:
theDoc.HtmlOptions.Engine = EngineType.Gecko;
然后执行你的代码:
theDoc.HtmlOptions.GeckoSubset.OnLoadScript =
@"(function() {
window.ABCpdf_go = false;
var elemento = document.getElementById('description');
var elementos = elemento.childNodes;
var contador = 0;
for (i = 0; i < elementos.length; i++) {
if(elementos[i].className == 'info'){
contador = contador + elementos[i].offsetHeight;
if(contador > 1600) {
contador = elementos[i].offsetHeight;
var childElements = elementos[i].childNodes;
for(j = 0; j < childElements.length; j++) {
if (childElements[j].className == 'infoDescrip' && i != 1){
childElements[j].className += ' saltoPagina';
}
}
}
}
}
window.ABCpdf_go = true;
})();";
但是如果您使用 EngineType.Gecko,bootstrap 库将不起作用。
我有一个使用 bootstrap 创建的 html 页面,我想用它创建一个 PDF,为此我正在使用 ABCPdf。 我正在尝试执行 javascript 脚本以将某些样式应用到我的 html,但它不起作用。有人知道会发生什么吗?
Doc theDoc = new Doc();
theDoc.Rect.Inset(5, 20);
theDoc.HtmlOptions.Timeout = 3000000;
theDoc.HtmlOptions.UseScript = true;
theDoc.HtmlOptions.PageCacheEnabled = false;
theDoc.HtmlOptions.DoMarkup = true;
theDoc.HtmlOptions.HostWebBrowser = false;
theDoc.HtmlOptions.Media = MediaType.Screen;
theDoc.HtmlOptions.BrowserWidth = 1500;
theDoc.HtmlOptions.AddLinks = true;
string script = @"var elemento = document.getElementById('description');"
+"for (i = 0; i < elemento.childNodes.length; i++) {"
+ "if (elemento.childNodes[i].className == 'row') {"
+ " if (elemento.childNodes[i].offsetHeight > 200) {"
+ "elemento.childNodes[i].className += ' saltoPagina'; } } }";
theDoc.HtmlOptions.OnLoadScript = script;
int theID;
theID = theDoc.AddImageUrl(url, true, 0, true);
提前致谢。 :)
解决:如果你使用的是 ABCPdf,你不能执行 javaScript(jQuery 永远不会工作)没有下一行:
theDoc.HtmlOptions.Engine = EngineType.Gecko;
然后执行你的代码:
theDoc.HtmlOptions.GeckoSubset.OnLoadScript =
@"(function() {
window.ABCpdf_go = false;
var elemento = document.getElementById('description');
var elementos = elemento.childNodes;
var contador = 0;
for (i = 0; i < elementos.length; i++) {
if(elementos[i].className == 'info'){
contador = contador + elementos[i].offsetHeight;
if(contador > 1600) {
contador = elementos[i].offsetHeight;
var childElements = elementos[i].childNodes;
for(j = 0; j < childElements.length; j++) {
if (childElements[j].className == 'infoDescrip' && i != 1){
childElements[j].className += ' saltoPagina';
}
}
}
}
}
window.ABCpdf_go = true;
})();";
但是如果您使用 EngineType.Gecko,bootstrap 库将不起作用。