【JavaScript】豆丁文档保存本地

前言

        最近犀牛书看了将近一半,对JavaScript算是有了个大概的了解,于是考虑写一些简单的脚本做个练习

思路

        在豆丁网随便找篇文档(测试文档),通过F12查看网页结构,可以看到文档的每一页实际位于id = page_i的canvas元素内,此外,不难发现对于某一页来说,如果该页没有出现在浏览器中,则其内的canvas元素不会加载。因此具体思路如下:

        1、通过底部工具栏的<span class='page_num'>确定文档页数

        2、手动加载全部文档,考虑这一步比较麻烦,把底部工具栏的下一页重写为将文档缓慢滚动到底部

        3、通过引入jsPDF将各canvas元素转为图片拼接

        4、重写文档顶部“文档下载”按钮进行下载

代码

// 加载jsPDF
var script_jsPDF = document.createElement('script');
script_jsPDF.type = 'text/javascript'; 
script_jsPDF.src = 'https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js';
document.body.appendChild(script_jsPDF);

// 重写下一页按钮为缓慢滚动文档
var nextPage = document.getElementById('nextPage');

nextPage.onclick = function() {
    window.scrollTo(0, 0);                              // 滚动到文档顶部
    setInterval(function() { scrollBy(0, 300) }, 300);  // 缓慢滚动使文档加载
}

// 定位到页面顶部"下载文档"按钮
var button = document.getElementsByClassName('doc_down_btn')[0];

// 重写button的onclick
button.onclick = function() {
    /*
        * 文档通过id = 'page_{i}'进行定位(page_1, page_2, page_3...),这里考虑通过while循环实现
        * 这里需要先加载所有页面
        */
    var pageNum = parseInt(document.getElementsByClassName('page_num')[0].textContent.slice(1));

    // 通过jsPDF将所有图片保存到一个pdf文件中
    var pdf = new jsPDF('', 'pt', 'a4', true);
    var imgWidth = 595.28;
    for (var index = 1; index <= pageNum; index++ ) {
        var page = document.getElementById('page_' + index.toString());             // 定位page元素
        var pageCanvas = page.getElementsByTagName('canvas')[0];                    // 获取canvas元素
        var pageData = pageCanvas.toDataURL('image/jpeg', 1.0);                       // 将其转为jpeg图片
        var imageHeight = imgWidth / pageCanvas.width * pageCanvas.height;
        if (index != 1) { pdf.addPage('a4'); }
        pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imageHeight, index, 'FAST'); // 添加到pdf中
    }

    // 文档名称
    var title = document.title;

    // 保存pdf
    pdf.save(title + '.pdf');
}

操作

        1、F12打开浏览器开发工具,切换到控制台(console),把上面代码粘贴进去

        2、单击下一页,待网页到底部后单击顶部工具栏的“下载文档”即可完成下载

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值