jsPDF可以使用插件。为了使其能够打印HTML,您需要包含某些插件并执行以下操作:
- 转到https://github.com/MrRio/jsPDF并下载最新版本。
- 在您的项目中包含以下脚本:
- jspdf.js
- jspdf.plugin.from_html.js
- jspdf.plugin.split_text_to_size.js
- jspdf.plugin.standard_fonts_metrics.js
如果您想忽略某些元素,则必须使用ID标记它们,然后在jsPDF的特殊元素处理程序中忽略它们。因此,您的HTML应如下所示:
<!DOCTYPE html>
<html>
<body>
<p id="ignorePDF">don't print this to pdf</p>
<div>
<p><font size="3" color="red">print this to pdf</font></p>
</div>
</body>
</html>
然后,您可以使用以下JavaScript代码在弹出窗口中打开创建的PDF文件:
var doc = new jsPDF();
var elementHandler = {
'#ignorePDF': function (element, renderer) {
return true;
}
};
var source = window.document.getElementsByTagName("body")[0];
doc.fromHTML(
source,
15,
15,
{
'width': 180,'elementHandlers': elementHandler
});
doc.output("dataurlnewwindow");
对我来说,这创造了一个漂亮整洁的PDF文件,其中只包含一行“将此打印到PDF”。
请注意,特殊元素处理程序仅处理当前版本中的ID,这也在
GitHub问题中说明。它说明:
因为匹配是针对节点树中的每个元素进行的,所以我的愿望是使其尽可能快速。在这种情况下,它意味着“只匹配元素ID”。元素ID仍然以jQuery样式“#id”进行处理,但这并不意味着支持所有jQuery选择器。
因此,用类选择器(如“.ignorePDF”)替换“#ignorePDF”对我无效。相反,您必须为要忽略的每个元素添加相同的处理程序,例如:
var elementHandler = {
'#ignoreElement': function (element, renderer) {
return true;
},
'#anotherIdToBeIgnored': function (element, renderer) {
return true;
}
};
从
示例中可以看出,选择像 'a' 或 'li' 这样的标签是可能的。但对于大多数用例来说,这可能有点过于不受限制了:
我们支持特殊元素处理程序。使用 jQuery 风格的 ID 选择器进行注册,可用于 ID 或节点名称。(例如 "#iAmID"、"div"、"span" 等)。目前不支持任何其他类型的选择器(类或复合选择器)。
需要补充的一件非常重要的事情是,您将失去所有的样式信息(CSS)。幸运的是,jsPDF 能够很好地格式化 h1、h2、h3 等标题,这对我的目的已经足够了。此外,它只会打印文本节点中的文本,这意味着它不会打印文本区域等内容的值。例如:
<body>
<ul>
<li>Print me!</li>
</ul>
<div>
<input type="textarea" value="Please print me, too!">
</div>
</body>
fromHTML
函数;请参考"http://mrrio.github.io/jsPDF/"上的“HTML渲染器”示例。 - mg1075