javascript - 从外部 html 文件和 css 生成 pdf

标签 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.addHTML(
        htmlDoc.body, // HTML DOM element.
    );
    pdf.save("test.pdf");
} 

其中data是一个字符串,其中包含我希望转换为pdf的外部网页的html。

Chrome 正在生成 TypeError:无法读取 null 的属性“innerWidth”

这例如工作完美(使用 fromHTML 而不是 addHTML),但缺少 css/styling:

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 方法已被弃用( http://raw.githack.com/MrRio/jsPDF/master/docs/global.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>

关于javascript - 从外部 html 文件和 css 生成 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58133256/

相关文章:

javascript - 在 React 中动态选择标签

Html2Canvas 图像被剪切

javascript - 葡萄牙/西类牙口音与 jsPDF

angular - html2canvas 回调 Onrendered 在 Angular 2 中不起作用

javascript - Casperjs点击方法

javascript - 尝试导入错误 : 'useDispatch' is not exported from 'react-redux'

javascript - 如何生成带有隐藏源 (html) div 的 html2canvas 图像

javascript - 当使用 html2canvas 渲染所有 div 时如何保存执行回调/操作

javascript - 捕获异步等待快速路由处理程序中的所有错误

javascript - 来自 firebase 的图像的 html2canvas jsPdf 访问错误