我正在尝试使用chrome 23+开发(离线)打包应用程序,允许用户生成并打印pdf文件。我尝试了各种方法来实现这一目标,但没有一种真正有效。
使用类似的东西,浏览器/应用程序冻结:
window.html (includes pdf.js (http://code.google.com/p/jspdf/) and genpdf.js (see below)):
....
<browser src="about:blank" width="1024" height="768"></browser>
genpdf.js:
var doc = new jsPDF();
doc.text(20, 20, 'foo');
doc.text(20, 30, 'bar');
document.querySelector('browser').src = window.webkitURL.createObjectURL(new Blob([doc.output()], {type: 'application/pdf'}));
这将是我显示生成的PDF的首选方式,但是当窗口冻结时,用户无法打印它。
另一种方法是将PDF保存到桌面:
chrome.fileSystem.chooseFile({type: 'saveFile'}, function(writableFileEntry) {
writableFileEntry.createWriter(function(writer) {
writer.onerror = function(e) {
console.log('writeend');
};
writer.onwriteend = function(e) {
console.log('writeend');
};
var doc = new jsPDF();
doc.text(20, 20, 'foo');
doc.text(20, 30, 'bar');
writer.write(new Blob([doc.output()], {type: 'application/pdf'}));
}, errorHandler);
});
这样可行,但桌面上的文件会被锁定,直到应用关闭。是否有任何api-call我想要释放保存的文件?
提前致谢!
答案 0 :(得分:3)
在第二个解决方案中,我认为你应该提供缓冲区大小,因此编写者将能够知道写入何时结束。
var docBuffer = doc.output();
writer.write(new Blob([docBuffer], {type: 'application/pdf', 'size': docBuffer.length}));
答案 1 :(得分:-1)
将潜行峰值带到wkhtmltopdf,它会使用WebKit引擎从HTML + CSS页面生成PDF。我喜欢它,它产生的像素与Chromium浏览器中显示的页面相同。有MS-Windows和Linux的版本,我已经试过了。