Javascript 如何使用PhantomJS在生成的PDF中显示已处理页面的url?
我的目标是从使用Rails创建的网站的站点地图中包含的每个页面生成PDF。我用幻影来得到它。在这个领域我是个新手,但我可以做到,但当我完成后,我意识到在每个PDF的开头看到生成PDF的页面的url也是有用的,这样我可以更快地浏览到该站点有100多个页面的页面 下面是Javascript:Javascript 如何使用PhantomJS在生成的PDF中显示已处理页面的url?,javascript,pdf,phantomjs,Javascript,Pdf,Phantomjs,我的目标是从使用Rails创建的网站的站点地图中包含的每个页面生成PDF。我用幻影来得到它。在这个领域我是个新手,但我可以做到,但当我完成后,我意识到在每个PDF的开头看到生成PDF的页面的url也是有用的,这样我可以更快地浏览到该站点有100多个页面的页面 下面是Javascript: // Render Sitemap to file var RenderUrlsToFile, arrayOfUrls, system; system = require("system"); /* Re
// Render Sitemap to file
var RenderUrlsToFile, arrayOfUrls, system;
system = require("system");
/*
Render given urls
@param array of URLs to render
@param callbackPerUrl Function called after finishing each URL, including the last URL
@param callbackFinal Function called after finishing everything
*/
var getFileNumber = function(urlIndex) {
if (urlIndex <10) {
return "00" + urlIndex;
} else {
if (urlIndex <100) {
return "0" + urlIndex;
} else {
return urlIndex;
}
}
};
RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) {
var getFilename, next, page, retrieve, urlIndex, webpage;
urlIndex = 0;
webpage = require("webpage");
page = null;
getFilename = function() {
return "rendermulti-" + getFileNumber(urlIndex) + ".pdf";
};
next = function(status, url, file) {
page.close();
callbackPerUrl(status, url, file);
return retrieve();
};
retrieve = function() {
var url;
if (urls.length > 0) {
url = urls.shift();
urlIndex++;
page = webpage.create();
page.viewportSize = {
width: 1920,
height: 1880
};
page.settings.userAgent = "Phantom.js bot";
return page.open(url, function(status) {
var file;
file = getFilename();
if (status === "success") {
return window.setTimeout((function() {
// !!!!!!!!!!!!! Doesn't work !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
page.evaluate(function() {
var x = document.getElementById("logoAndNavigation");
var newP = document.createElement("P")
var textnode = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;
newP.appendChild(textnode)
x.insertBefore(newP, x.childNodes[0]);
});
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
page.render("tempPdfs/" + file);
return next(status, url, file);
}), 200);
} else {
return next(status, url, file);
}
});
} else {
return callbackFinal();
}
};
return retrieve();
};
// This makes an array with all the urls inside the sitemap
var arrayOfUrls = [''];
var page = require('webpage').create();
page.open('http://localhost:3000/sitemap.xml', function() {
var content = page.content;
parser = new DOMParser();
xmlDoc = parser.parseFromString(content,'text/xml');
var loc = xmlDoc.getElementsByTagName('loc');
for(var i=0; i < loc.length; i++)
{
var url=loc[i].textContent;
arrayOfUrls.push(url);
}
});
RenderUrlsToFile(arrayOfUrls, (function(status, url, file) {
if (status !== "success") {
return console.log("Unable to render '" + url + "'");
} else {
return console.log("Rendered '" + url + "' at '" + file + "'");
}
}), function() {
return phantom.exit();
});
我想在页面的一个元素中显示url,该元素具有id logoAndNavigation,但我遇到了以下错误:
未找到\u错误:DOM异常8:试图在不存在节点的上下文中引用该节点
如果我在变量textnode中只使用像hello这样的字符串,它会工作,但如果我尝试使用页面的url,则不会工作
有人能帮我吗?
提前谢谢你 appendChild需要的是节点而不是字符串。你可能想用
var x = document.getElementById("logoAndNavigation");
var newP = document.createElement("p"); // small p
var textnode = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;
newP.innerHTML = textnode; // this
x.insertBefore(newP, x.childNodes[0]);
您还可以使用的示例将URL直接添加到页眉或页脚
var x = document.getElementById("logoAndNavigation");
var newP = document.createElement("p"); // small p
var textnode = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;
newP.innerHTML = textnode; // this
x.insertBefore(newP, x.childNodes[0]);