浏览器插件形式将html转成pdf,将html转成图片

javascript: (function () {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    var script1 = document.createElement('script');
    script.type = 'text/javascript';
    script.src = "https://hcsy.gitee.io/htest/html2canvas.js?" + Date.now();
    script1.type = 'text/javascript';
    script1.src = "https://hcsy.gitee.io/htest/jsPdf.debug.js?" + Date.now();
    script.onload = script.onreadystatechange = function () {
        if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
            script1.onload = script1.onreadystatechange = function () {
                if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
                    var result = prompt('输入样式ID');
                    var styleId = "article_content";
                    console.log("result>>",result);
                    if (result) {
                        styleId = result;
                    }
                    console.log("styleId",styleId);
                    /**
                     * 具体执行
                     */
                    html2canvas(document.getElementById(styleId), {
                        onrendered: function (canvas) {
                            var contentWidth = canvas.width;
                            var contentHeight = canvas.height;
                           
                            var pageHeight = contentWidth / 595.28 * 841.89;
          
                            var leftHeight = contentHeight;
                   
                            var position = 0;
           
                            var imgWidth = 555.28;
                            var imgHeight = 555.28 / contentWidth * contentHeight;

                            var pageData = canvas.toDataURL('image/jpeg', 1.0);

                            var pdf = new jsPDF('', 'pt', 'a4');
   
  
                            if (leftHeight < pageHeight) {
                                pdf.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight);
                            } else {
                                while (leftHeight > 0) {
                                    pdf.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight);
                                    leftHeight -= pageHeight;
                                    position -= 841.89;
                       
                                    if (leftHeight > 0) {
                                        pdf.addPage();
                                    }
                                }
                            }
                            pdf.save('hcsy' + Date.now() + '.pdf');
                        }
                    })
                }
            };
        }
    };
    head.appendChild(script);
    head.appendChild(script1);
})()

使用:

1.

2.点击保存

3.在需要的页面点击标签即可

 

 

javascript: (function () {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    var script1 = document.createElement('script');
    script.type = 'text/javascript';
    script.src = "https://hcsy.gitee.io/htest/html2canvas.js?" + Date.now();
    script1.type = 'text/javascript';
    script1.src = "https://hcsy.gitee.io/htest/jsPdf.debug.js?" + Date.now();
    script.onload = script.onreadystatechange = function () {

        if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
            script1.onload = script1.onreadystatechange = function () {
                if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
                    var result = prompt('输入样式ID');
                    var styleId = "article_content";
                    console.log("result>>", result);
                    if (result) {
                        styleId = result;
                    }
                    console.log("styleId", styleId);
                    /**
                     * 具体执行
                     */

                    var canvas2 = document.createElement("canvas");
                    var _canvas = document.getElementById(styleId);
                    var w = parseInt(window.getComputedStyle(_canvas).width);
                    var h = parseInt(window.getComputedStyle(_canvas).height);
                    canvas2.width = w * 1;
                    canvas2.height = h * 1;
                    canvas2.style.width = w + "px";
                    canvas2.style.height = h + "px";
                  
                    var context = canvas2.getContext("2d");
                    context.scale(1, 1);
                    html2canvas(document.getElementById(styleId)).then(function (canvas) {
                        var imgUri = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
                        window.location.href=imgUri;
                    });
                }
            };
        }
    };
    head.appendChild(script);
    head.appendChild(script1);
})()
     // if(!this.check()){alert("所有打*号的都是必填项");return}
        //获取节点高度,后面为克隆节点设置高度。
        var height = $("#app").height();
        //克隆节点,默认为false,不复制方法属性,为true是全部复制。
        var cloneDom = $("#app").clone(true);
        //设置克隆节点的css属性,因为之前的层级为0,我们只需要比被克隆的节点层级低即可。
        cloneDom.css({
            "background-color": "#f2f3f5",
            "position": "absolute",
            "top": "0px",
            "z-index": "-1",
            "height": height
        });
        //将克隆节点动态追加到body后面。
        console.log(cloneDom);
        cloneDom.find("#button").remove();
        $("body").append(cloneDom);
        //插件生成base64img图片。
        html2canvas(cloneDom, {
            //Whether to allow cross-origin images to taint the canvas
            allowTaint: true,
            //Whether to test each image if it taints the canvas before drawing them
            taintTest: false,
            onrendered: function (canvas) {
                var contentWidth = canvas.width;
                var contentHeight = canvas.height;
                console.log(contentHeight);
                console.log(contentWidth);
                //一页pdf显示html页面生成的canvas高度;
                var pageHeight = contentWidth / 592.28 * 841.89;
                //未生成pdf的html页面高度
                var leftHeight = contentHeight;
                //页面偏移
                var position = 0;
                //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
                var imgWidth = 595.28;
                var imgHeight = 592.28 / contentWidth * contentHeight;
                var pageData = canvas.toDataURL('image/jpeg', 1.0);
                //注① var 
                    // pdf = new jsPDF('', 'pt', 'a4');
                var pdf = new jsPDF('', 'pt', 'a4');
                //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
                //当内容未超过pdf一页显示的范围,无需分页
                if (leftHeight < pageHeight) {
                    pdf.addImage(pageData, 'JPEG', 10, 10, imgWidth, imgHeight);
                } else {
                    while (leftHeight > 0) {
                        //arg3-->距离左边距;arg4-->距离上边距;arg5-->宽度;arg6-->高度
                        pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
                        leftHeight -= pageHeight;
                        position -= 841.89; //避免添加空白页
                        if (leftHeight > 0) {
                            //注②
                            pdf.addPage();
                        }
                    }
                }
                pdf.save('业务调查表.pdf');
            }
        });

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用JavaScript将HTML网页转换为PDF,以下是一些方法: 1. 使用第三方库:可以使用像jsPDF这样的第三方库来将HTML转换为PDF。jsPDF是一个JavaScript库,可在浏览器中生成PDF文件。下面是一个使用jsPDF的示例代码: ``` // 引入jsPDF库 <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.4.0/jspdf.umd.min.js"></script> // 将HTML转换为PDF <script> var doc = new jsPDF(); doc.html(document.body, { callback: function (doc) { doc.save('output.pdf'); } }); </script> ``` 2. 使用浏览器内置功能:现代浏览器提供了将网页转换为PDF的内置功能。你可以使用window.print()函数触发打印对话框,然后在打印对话框中选择“另存为PDF”选项。以下是一个示例代码: ``` // 打印对话框 window.print(); ``` 3. 使用服务器端库:如果你有一个服务器,你可以使用像PhantomJS这样的库在服务器端将HTML转换为PDF。PhantomJS是一个无界面的浏览器,可以在服务器端运行JavaScript并渲染HTML页面。以下是一个使用PhantomJS的示例代码: ``` // 引入PhantomJS库 <script src="https://cdnjs.cloudflare.com/ajax/libs/phantomjs/2.1.1/phantomjs.min.js"></script> // 将HTML转换为PDF <script> var page = require('webpage').create(); page.open('http://example.com', function() { page.render('output.pdf'); phantom.exit(); }); </script> ``` 这些都是将HTML转换为PDF的方法,你可以根据你的需要选择其中一种方法。 ### 回答2: 通过JavaScript将HTML网页转换为PDF可以使用第三方库或API来实现。 一种常见的方法是使用jsPDF库。jsPDF是一个开源的JavaScript库,可以生成PDF文件并提供多种功能和选项。首先,你需要将jsPDF库添加到你的HTML文件中。可以通过CDN链接引入该库或者通过下载并将其链接到你的项目中。 使用jsPDF库的基本步骤如下: 1. 创建一个新的jsPDF实例:var pdf = new jsPDF(); 2. 将HTML元素转换为PDF内容并将其添加到jsPDF实例中: - 使用HTML2canvas库将HTML元素转换为canvas图片html2canvas(element, {options}).then(function(canvas) {...}); - 使用toDataURL方法将canvas图片转换为DataURL:var imgData = canvas.toDataURL('image/png'); - 使用addImage方法将图片添加到jsPDF实例中:pdf.addImage(imgData, 'PNG', x, y, width, height); 3. 保存或下载PDF文件: - 使用save方法将PDF保存到本地:pdf.save('filename.pdf'); - 或者使用output方法将PDF转换为数据流,并通过Ajax请求发送给服务器保存或下载。 另一种方法是使用第三方API,例如pdfmake或pdfcrowd。这些API提供基于云端的PDF转换服务,你需要将HTML数据发送给API,然后它们将返回一个生成的PDF文件。对于使用API的方法,请查阅相关文档以获取更多详细信息。 无论你选择使用哪种方法,确保在将HTML网页转换为PDF之前,你已经学习和理解了相关库或API的使用方法,并遵循其文档中的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值