来自HTML图像的jsPDF导致pdf为空
jsPDF fromHTML images cause the pdf to be empty
我正在尝试从 Tinymce Content 生成 pdf,我使用 AngularJS 访问它。为此,我在 jspdf 中使用 from_html 插件。
首先是相关代码部分。
相关函数&Index.ejsjspdf包含
//relevant function
var specialElementHandlers = {
'#bypassme': function(element, renderer) {
return true;
}
};
var margin = {
top: 0,
left: 0,
right: 0,
bottom: 0
};
var tinymceToJSPDFHTML = document.createElement("body");
tinymceToJSPDFHTML.innerHTML = $scope.selectedItem.content;
var doc = new jsPDF();
doc.fromHTML(tinymceToJSPDFHTML, 0, 0, {
'width': 100, // max width of content on PDF
'elementHandlers': specialElementHandlers
}, function(a) { console.log(a); }, margin);
doc.save('project.pdf');
<script src="/libs/jsPDF-1.2.61/dist/jspdf.debug.js"></script>
<script src="/libs/jsPDF-1.2.61/plugins/from_html.js"></script>
我想从 html 解析为 pdf 的代码看起来有点像这样,这只是一个例子。
<strong>
<img data-mce-src="file/3605842ba1b6e8ac5417622bf1c43b5b" src="file/3605842ba1b6e8ac5417622bf1c43b5b"></img>
aaaaa
</strong>
</p>
<p data-mce-style="text-align: center;" style="text-align: center;">
<strong>
sasasa
</strong>
</p>
<p data-mce-style="text-align: right;" style="text-align: right;">
<em>
<strong>
asasas
</strong>
</em>
</p>
<p data-mce-style="text-align: left;" style="text-align: left;">
<span data-mce-style="text-decoration: underline;" style="text-decoration: underline;">
<em>
<strong>
asasasa
</strong>
</em>
</span>
</p>
<ul>
<li data-mce-style="text-align: left;" style="text-align: left;">
<span data-mce-style="text-decoration: underline;" style="text-decoration: underline;">
<em>
<strong>
bas
</strong>
</em>
</span>
</li>
</ul>
如果我在没有图像的情况下解析这段代码,它至少在某些方面是有效的,一些文本操作(如斜体)无法真正识别,而且列表也无法被解析器识别。
但是,如果我解析图像(我尝试的所有图像都是来自 windows 图片文件夹的标准 .jpg 图片,并且我将它们缩小以防它们不适合 pdf 网站,那就是是什么导致了空白网站。
目前我调试了jspdf代码,可以看出它是通过load image的方法运行的。 get-requests 也是从此代码发送的,如 Browser Debugger 中所示(此例程也是我编写的)。但该网站仍然是空的。完全相同的 img src 在编辑器中显示得很好。
我该如何解决这个问题,使图像完全显示并且不会导致 pdf 为空。
我找到了解决问题的方法。使用 fromHTML
插件时,在回调中保存 pdf 文件很重要,否则它不会在保存文档时完成渲染。
doc.fromHTML(tinymceToJSPDFHTML, 0, 0, {
'width': 100, // max width of content on PDF
'elementHandlers': specialElementHandlers
},
function(bla){doc.save('saveInCallback.pdf');},
margin);
感谢@FroZenViper 为我指出回调解决方案,然后我可以使用 setTimeout 解决它:) - jsPDF 版本 1.5.3
doc.fromHTML(yourTargetHTML, 0, 0, {
// options
},
setTimeout(function () {
doc.save(`fileName`);
}, 0);
我正在尝试从 Tinymce Content 生成 pdf,我使用 AngularJS 访问它。为此,我在 jspdf 中使用 from_html 插件。
首先是相关代码部分。
相关函数&Index.ejsjspdf包含
//relevant function
var specialElementHandlers = {
'#bypassme': function(element, renderer) {
return true;
}
};
var margin = {
top: 0,
left: 0,
right: 0,
bottom: 0
};
var tinymceToJSPDFHTML = document.createElement("body");
tinymceToJSPDFHTML.innerHTML = $scope.selectedItem.content;
var doc = new jsPDF();
doc.fromHTML(tinymceToJSPDFHTML, 0, 0, {
'width': 100, // max width of content on PDF
'elementHandlers': specialElementHandlers
}, function(a) { console.log(a); }, margin);
doc.save('project.pdf');
<script src="/libs/jsPDF-1.2.61/dist/jspdf.debug.js"></script>
<script src="/libs/jsPDF-1.2.61/plugins/from_html.js"></script>
我想从 html 解析为 pdf 的代码看起来有点像这样,这只是一个例子。
<strong>
<img data-mce-src="file/3605842ba1b6e8ac5417622bf1c43b5b" src="file/3605842ba1b6e8ac5417622bf1c43b5b"></img>
aaaaa
</strong>
</p>
<p data-mce-style="text-align: center;" style="text-align: center;">
<strong>
sasasa
</strong>
</p>
<p data-mce-style="text-align: right;" style="text-align: right;">
<em>
<strong>
asasas
</strong>
</em>
</p>
<p data-mce-style="text-align: left;" style="text-align: left;">
<span data-mce-style="text-decoration: underline;" style="text-decoration: underline;">
<em>
<strong>
asasasa
</strong>
</em>
</span>
</p>
<ul>
<li data-mce-style="text-align: left;" style="text-align: left;">
<span data-mce-style="text-decoration: underline;" style="text-decoration: underline;">
<em>
<strong>
bas
</strong>
</em>
</span>
</li>
</ul>
如果我在没有图像的情况下解析这段代码,它至少在某些方面是有效的,一些文本操作(如斜体)无法真正识别,而且列表也无法被解析器识别。
但是,如果我解析图像(我尝试的所有图像都是来自 windows 图片文件夹的标准 .jpg 图片,并且我将它们缩小以防它们不适合 pdf 网站,那就是是什么导致了空白网站。
目前我调试了jspdf代码,可以看出它是通过load image的方法运行的。 get-requests 也是从此代码发送的,如 Browser Debugger 中所示(此例程也是我编写的)。但该网站仍然是空的。完全相同的 img src 在编辑器中显示得很好。
我该如何解决这个问题,使图像完全显示并且不会导致 pdf 为空。
我找到了解决问题的方法。使用 fromHTML
插件时,在回调中保存 pdf 文件很重要,否则它不会在保存文档时完成渲染。
doc.fromHTML(tinymceToJSPDFHTML, 0, 0, {
'width': 100, // max width of content on PDF
'elementHandlers': specialElementHandlers
},
function(bla){doc.save('saveInCallback.pdf');},
margin);
感谢@FroZenViper 为我指出回调解决方案,然后我可以使用 setTimeout 解决它:) - jsPDF 版本 1.5.3
doc.fromHTML(yourTargetHTML, 0, 0, {
// options
},
setTimeout(function () {
doc.save(`fileName`);
}, 0);