Javascript 从外部html文件和css生成pdf
我有一个外部html文件,我想以PDF格式打印,但是我很难让示例代码按预期的方式工作,而且在实现它时,我显然遗漏了一些琐碎的东西 这是我目前的代码:Javascript 从外部html文件和css生成pdf,javascript,jspdf,html2canvas,Javascript,Jspdf,Html2canvas,我有一个外部html文件,我想以PDF格式打印,但是我很难让示例代码按预期的方式工作,而且在实现它时,我显然遗漏了一些琐碎的东西 这是我目前的代码: function savePDF(data) { var parser = new DOMParser(); var htmlDoc = parser.parseFromString(data, 'text/html'); let pdf = new jsPDF('p','pt','a4'); pdf.addHT
function savePDF(data) {
var parser = new DOMParser();
var htmlDoc = parser.parseFromString(data, 'text/html');
let pdf = new jsPDF('p','pt','a4');
pdf.addHTML(
htmlDoc.body, // HTML DOM element.
);
pdf.save("test.pdf");
}
其中数据是一个字符串,包含我希望转换为pdf的外部网页的html
Chrome正在生成TypeError:无法读取null的属性“innerWidth”
例如,使用fromHTML而不是addHTML可以很好地工作,但是缺少css/样式:
function savePDF(data) {
var parser = new DOMParser();
var htmlDoc = parser.parseFromString(data, 'text/html');
let pdf = new jsPDF('p','pt','a4');
pdf.fromHTML(htmlDoc.body.innerHTML, 0, 0, {},
function(){pdf.save('test.pdf');
});
}
我正在使用的示例html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PDF Test</title>
</head>
<body>
<div id="capture" style="padding: 10px; background: #f5da55">
<h4 style="color: #000; ">Hello world!</h4>
</div>
</body>
</html>
正如文档中所说,addHtml方法已被弃用,因此我对您的示例进行了一些介绍,如果您像这样更新代码,它将正常工作。您仍然需要做一些工作来修复pdf中div的宽度
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js" integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/" crossorigin="anonymous"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>
</head>
<body>
<div id="capture" style="padding: 10px; background: #f5da55;">
<h4 style="color: #000; ">Hello world!</h4>
</div>
</body>
<script type="text/javascript">
function savePDF(data) {
let pdf = new jsPDF('p','pt','a4');
pdf.html(data, {
callback: function (doc) {
doc.save("test.pdf");
}
});
}
savePDF(document.body.innerHTML)
</script>
</html>
你能提供一个导致错误的html数据的例子吗?@RiccardoGai在我的原始帖子中添加了一个简单的html示例。似乎无法处理外部css文件。如果找到其他方法,则会将您的答案标记为已接受,因为它与我提供的示例html一起工作。