我有一个phantomjs脚本,正在逐步浏览我的网站页面.
对于每个页面,我使用page = new WebPage()
,然后page.close()
在完成页面后.(这是对该过程的简化描述,我使用的是PhantomJS 1.9.7版.)
在每个页面上,我使用page.renderBase64('PNG')
一次或多次,并将结果添加到数组.
当我完成所有工作后,我会构建一个新页面并循环显示图像数组,并使用每个图像添加到页面中
.
完成后,我page.render(...)
用来制作PDF文件.
这一切都很有效...除了在第20张图像之后图像停止出现在PDF中 - 其余图像显示为4x4像素黑点
对于此故障排除......
我已经更改了render
输出PNG文件,并在第19或第20张图像后出现同样的问题.
我输出了原始HTML.我可以在Chrome中打开它,所有图像都可见.
任何想法为什么渲染会失败?
解决了这个问题.事实证明PhantomJS render
在执行时仍在准备图像.如下图所示,移动render
到onLoadFinished
处理程序中解决了问题.之前,page.render
在page.content =
任务之后立即被召唤.
对于那些有兴趣做类似事情的人来说,这是我们正在做的过程的要点:
var htmlForAllPages = [];
然后,当我们在PhantomJS中加载每个页面时:
var img = page.renderBase64('PNG'); ... htmlForAllPages.push('<img src="data:image/png;base64,' + img + '">'); ...
完成后,将创建最终的PDF ...我们已准备好模板文件,包含所有必需的HTML和CSS等,只需将生成的HTML插入其中:
var fs = require('fs'); var template = fs.read('DocumentationTemplate.html'); var finalHtml = template.replace('INSERTBODYHERE', htmlForAllPages.join('\n')); var pdfPage = new WebPage(); pdfPage.onLoadFinished = function() { pdfPage.render('Final.pdf'); pdfPage.close(); }; pdfPage.content = finalHtml;