Greasy Fork

Greasy Fork is available in English.

博客转PDF(网页局部区域打印)-适用于知乎、CSDN、掘金、博客园、开源中国、简书、思否

把知乎、CSDN、简书、博客园、开源中国、掘金、思否七大主流博客网站的文章部分另存为PDF,便于本地进行编辑。兼容chrome,firefox,edge浏览器,其余未测试

当前为 2022-01-18 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         博客转PDF(网页局部区域打印)-适用于知乎、CSDN、掘金、博客园、开源中国、简书、思否
// @namespace    http://greasyfork.icu/zh-CN/scripts/428697
// @homepageURL  http://greasyfork.icu/zh-CN/scripts/428697
// @home-url1    https://github.com/doublesweet01/BS_script
// @version      10.8
// @description  把知乎、CSDN、简书、博客园、开源中国、掘金、思否七大主流博客网站的文章部分另存为PDF,便于本地进行编辑。兼容chrome,firefox,edge浏览器,其余未测试
// @author       sweet
// @include       https://zhuanlan.zhihu.com/p/*
// @include       https://www.zhihu.com/question/*/answer/*
// @include      https://www.zhihu.com/question/*
// @include      https://blog.csdn.net/*/article/details/*
// @include      https://*.blog.csdn.net/article/details/*
// @include      https://www.jianshu.com/p/*
// @include      https://www.cnblogs.com/*
// @include      https://juejin.cn/post/*
// @include      https://my.oschina.net/*/blog/*
// @include      https://my.oschina.net/*/*/blog/*
// @include      https://www.oschina.net/question/*
// @include      https://segmentfault.com/a/*
// @run-at      document-idle
// @icon        https://cdn.jsdelivr.net/gh/doublesweet01/BS_script@master/image/sweet.jpg
// @require     https://cdn.staticfile.org/jquery/1.9.1/jquery.min.js
// @require     https://cdn.jsdelivr.net/npm/[email protected]/jQuery.print.min.js
// @require     https://code.jquery.com/jquery-migrate-1.2.1.min.js
// @note        v10.8 修复知乎平台公式图片加载失败问题
// @note        v10.7 修复由于知乎平台的代码优化导致的公式打印失败问题
// @note        v10.6 修复由于掘金改版导致的打印失效的问题&&修复知乎讨论页打印失败的问题&&恢复保留所有平台的作者信息
// @note        v10.5 修改脚本名称
// @note        v10.4 修复由于知乎改版带来的新bug以及question推荐页面强制跳转的bug
// @note        v10.3 删除许可证
// @note        v10.2 修复csdn页面打印不全的bug
// @note        v10.1 修复csdn个别页面失效问题
// @note        v10.0 整合了思否
// @note        v9.0 整合了开源中国
// @note        v8.0 整合了掘金
// @note        v7.0 整合了博客园
// @note        v6.0 整合了简书
// @note        v5.0 整合了csdn
// @note        v4.0 整合了知乎
// @note        v1.0 实现知乎网页打印功能
// ==/UserScript==
(function () {
    'use strict';
    var page2pdfClick = false;
    var listItemNumber = 0;
    var buttonCLickCount = 0;
    var opeArray = new Array();
    var hasAddStyle = false;

    let pageConfigure = {
        parentDiv: "",
        firstChild: "",
        lastChild: "",
        index: 0,
        pageHref: "",
        ifNeedPageRedirect: false,
        currentPage: 0
    }
    var pageHref = window.location.href;//获取网址
    if (pageHref.indexOf("www.zhihu.com/question/") != -1 && pageHref.indexOf("/answer/") != -1) {//表示是讨论回答,推荐回答页面
        pageConfigure.pageHref = pageHref;
        pageConfigure.parentDiv = "QuestionButtonGroup";
        pageConfigure.firstChild = "FollowButton";
        $(document).ready(function () {
            let readMoreBtn = document.querySelectorAll('.ContentItem-expandButton');
            // 自动点击页面上的所有阅读全文
            for (let i = 0; i < readMoreBtn.length; i++) {
                readMoreBtn[i].click();
            }
        });

        let readAllAnswer = $('.ViewAll-QuestionMainAction');
        for (let i = 0; i < readAllAnswer.length; i++) {
            readAllAnswer[i].setAttribute('href', 'javascript:void(0)');
            readAllAnswer[i].addEventListener('click', () => {
                toAllAnswerPage();
            })
        }
        pageConfigure.currentPage = 0;//表示是知乎的讨论页
    } else if (pageHref.indexOf("zhuanlan.zhihu.com/p") != -1) {//表示是文章页
        pageConfigure.pageHref = pageHref;
        pageConfigure.parentDiv = "ColumnPageHeader-Button";
        pageConfigure.firstChild = "ColumnPageHeader-WriteButton";
        pageConfigure.currentPage = 0;//表示是知乎
    } else if (pageHref.indexOf("www.zhihu.com/question/") != -1) {//知乎讨论回答,包含所有回答
        pageConfigure.pageHref = pageHref;
        pageConfigure.parentDiv = "QuestionButtonGroup";
        pageConfigure.firstChild = "FollowButton";
        //给所有讨论的父节点添加className,便于后续监听页面懒加载
        var listParentDiv = $(".List-item")[0].parentElement;
        listParentDiv.className = "listParent";
        pageConfigure.currentPage = 0;//表示是知乎
    } else if (pageHref.indexOf("csdn") != -1) {//表示是csdn文章页
        pageConfigure.pageHref = pageHref;
        pageConfigure.parentDiv = "onlyUser";
        pageConfigure.lastChild = "toolbar-btn-write";
        pageConfigure.firstChild = "toolbar-btn-vip";
        pageConfigure.currentPage = 1;//表示是csdn
    } else if (pageHref.indexOf("jianshu") != -1) {//表示是简书文章页
        pageConfigure.pageHref = pageHref;
        pageConfigure.parentDiv = "_26qd_C";
        pageConfigure.currentPage = 2;//表示是简书
    } else if (pageHref.indexOf("cnblogs") != -1) {//表示是博客园
        pageConfigure.pageHref = pageHref;
        pageConfigure.parentDiv = "navList";
        pageConfigure.currentPage = 3;//表示是博客园
    } else if (pageHref.indexOf("juejin") != -1) {//表示是掘金文章页
        pageConfigure.pageHref = pageHref;
        pageConfigure.currentPage = 4;//表示是掘金
    } else if (pageHref.indexOf("oschina") != -1) {//表示是开源中国
        pageConfigure.pageHref = pageHref;
        if (pageHref.indexOf("blog") != -1) {
            pageConfigure.parentDiv = "action-box";
        }
        pageConfigure.currentPage = 5;//表示是开源中国
    } else if (pageHref.indexOf("segmentfault") != -1) {//表示是思否
        pageConfigure.pageHref = pageHref;
        pageConfigure.currentPage = 6;//表示是思否
    }

    if (pageConfigure.ifNeedPageRedirect == true) {
        window.location.replace(pageConfigure.pageHref);
    }

    function toAllAnswerPage() {
        let index = pageConfigure.pageHref.indexOf("answer");
        let pageHref = pageConfigure.pageHref.substring(0, index - 1);
        window.location.replace(pageHref);
    }

    // 关闭登录框
    function closeLogin() {
        if (pageConfigure.currentPage == 0) {
            let removeLoginModal = e => {
                if (e.target.innerHTML && e.target.getElementsByClassName('Modal-wrapper').length > 0) {
                    if (e.target.getElementsByClassName('Modal-wrapper')[0].querySelector('.signFlowModal')) {
                        let button = e.target.getElementsByClassName('Button Modal-closeButton Button--plain')[0];
                        if (button) button.click();
                    }
                }
            }
            document.addEventListener('DOMNodeInserted', removeLoginModal);
        }
    }

    closeLogin();

    var parentDiv = "";
    var firstChild = "";
    var div = "";
    var div1 = "";
    var div4 = "";
    var div5 = "";
    var div6 = "";
    if (pageConfigure.currentPage == 0 || pageConfigure.currentPage == 1) {
        if (pageConfigure.currentPage == 0) {
            firstChild = document.querySelector('.' + pageConfigure.firstChild);
        }
        parentDiv = document.querySelector('.' + pageConfigure.parentDiv);
        div = document.createElement("div");
        div.innerHTML = '<button type="button" class="printButton">\n' +
            '        <img id="printLogo" src="https://cdn.jsdelivr.net/gh/doublesweet01/BS_script@master/image/printLogo.png">\n' +
            '        <p>文章转PDF</p>\n' +
            '    </button>';
        div.className = "pagePrint";
    } else if (pageConfigure.currentPage == 2) {
        parentDiv = document.querySelector('.' + pageConfigure.parentDiv);
        div = document.createElement("button");
        div.innerHTML = '文章转PDF';
        div.className = "_1OyPqC _3Mi9q9 _1YbC5u printButton";
        div.type = "button";
    } else if (pageConfigure.currentPage == 3) {
        parentDiv = document.querySelector('#' + pageConfigure.parentDiv);
        if (!parentDiv) {//博客园特殊的一个网页模板
            parentDiv = document.getElementById("leftmenu").children[1];
        }
        div = document.createElement("li");
        div.innerHTML = '<a id="printButton" class="menu" href="javascript:void(0);">\n' +
            '        文章转PDF' +
            '    </a>';
        div.id = "pagePrint";
    } else if (pageConfigure.currentPage == 4) {
        div = document.createElement("div");
        div.innerHTML =
            '        <div class="pagePrint panel-btn">\n' +
            '        <div class="tooltip">\n' +
            '        <img id="printLogo" src="https://cdn.jsdelivr.net/gh/doublesweet01/BS_script@master/image/printLogo-jj.png">\n' +
            '        </div>\n' +
            '        </div>\n';
        div.className = "printButton";
        div4 = document.createElement("div");
        div4.innerHTML = '<div class="tooltip-one"></div>\n' +
            '    <div class="tooltip-two">文章转PDF</div>';
        div4.className = "tooltips";
    } else if (pageConfigure.currentPage == 5) {
        if (pageConfigure.parentDiv.length > 0) {
            parentDiv = document.querySelectorAll('.' + pageConfigure.parentDiv)[1];
            div = document.createElement("div");
            div.innerHTML =
                '        <div class="action-item__button">\n' +
                '        <img id="printLogo" src="https://cdn.jsdelivr.net/gh/doublesweet01/BS_script@master/image/printLogo04.png">\n' +
                '        </div>\n' +
                '        <div class="action-item__text">\n' +
                '        <p>转PDF</p>' +
                '        </div>\n';
            div.className = "action-item printButton";
        } else {
            div1 = document.createElement("div");
            div1.innerHTML =
                '        <img id="printLogo" src="https://cdn.jsdelivr.net/gh/doublesweet01/BS_script@master/image/printLogo04.png">\n';
            div1.className = "printButton";
            div5 = document.createElement("div");
            div5.innerHTML = '<div class="tooltip-one"></div>\n' +
                '    <div class="tooltip-two">文章转PDF</div>';
            div5.className = "tooltips";
        }
    } else if (pageConfigure.currentPage == 6) {
        div = document.createElement("div");
        div.innerHTML =
            '        <div class="pagePrint panel-btn">\n' +
            '        <div>\n' +
            '        <img id="printLogo" src="https://cdn.jsdelivr.net/gh/doublesweet01/BS_script@master/image/printLogo05.png">\n' +
            '        </div>\n' +
            '        </div>\n';
        div.className = "printButton";
        div6 = document.createElement("div");
        div6.innerHTML = '<div class="tooltip-one"></div>\n' +
            '    <div class="tooltip-two">文章转PDF</div>';
        div6.className = "tooltips";
    }

    var cssStyle = "";
    var object = "";
    var object01 = "";
    var pos = "";
    var btnTop = "";
    var tipTop = "";
    var btnWidth = "";
    var btnLeft = "";
    var tipLeft = "";
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
    if (pageConfigure.currentPage == 0) {
        parentDiv.insertBefore(div, firstChild);
        cssStyle = ".printButton {\n" +
            "        background-color: #0066ff;\n" +
            "        color: white;\n" +
            "        padding: 0 12px;\n" +
            "        border-radius: 3px;\n" +
            "        margin-right: 5px;\n" +
            "        font-size: 14px;\n" +
            "        line-height: 34.5px;\n" +
            "        border: none;\n" +
            "        text-align: center;\n" +
            "        display: inline-flex;\n" +
            "    }\n" +
            "    #printLogo{\n" +
            "        width: 24px;\n" +
            "        height: 24px;\n" +
            "        margin-top: 5.25px;\n" +
            "    }\n" +
            "    .QuestionButtonGroup{\n" +
            "        display: -webkit-inline-box;\n" +
            "    }";
    } else if (pageConfigure.currentPage == 1) {
        parentDiv.appendChild(div);
        cssStyle = ".printButton {\n" +
            "        background-color: #ff4d4d;\n" +
            "        color: white;\n" +
            "        border-radius: 3px;\n" +
            "        padding-right: 5px !important;\n" +
            "        margin-top: 8px !important;\n" +
            "        margin-left: 5px !important;\n" +
            "        font-size: 14px;\n" +
            "        line-height: 32px;\n" +
            "        border: none;\n" +
            "        text-align: center;\n" +
            "        display: inline-flex;\n" +
            "    }\n" +
            "    #printLogo{\n" +
            "        width: 24px;\n" +
            "        height: 24px;\n" +
            "        margin-top: 5.25px;\n" +
            "    }\n" +
            "    .pagePrint{\n" +
            "        display: -webkit-inline-box;\n" +
            "    }";
    } else if (pageConfigure.currentPage == 2) {
        parentDiv.appendChild(div);
        cssStyle = "";
    } else if (pageConfigure.currentPage == 3) {
        parentDiv.appendChild(div);
        cssStyle = ".printButton {\n" +
            "        background-color: #ff4d4d;\n" +
            "        color: white;\n" +
            "        border-radius: 3px;\n" +
            "        padding-right: 5px !important;\n" +
            "        margin-top: 8px !important;\n" +
            "        margin-left: 5px !important;\n" +
            "        font-size: 14px;\n" +
            "        line-height: 32px;\n" +
            "        border: none;\n" +
            "        text-align: center;\n" +
            "        display: inline-flex;\n" +
            "    }\n" +
            "    #printLogo{\n" +
            "        width: 24px;\n" +
            "        height: 24px;\n" +
            "        margin-top: 5.25px;\n" +
            "    }\n" +
            "    .pagePrint{\n" +
            "        display: -webkit-inline-box;\n" +
            "    }";
    } else if (pageConfigure.currentPage == 4) {
        document.body.appendChild(div);
        document.body.appendChild(div4);
        object = document.getElementsByClassName("like-btn")[0];
        if (object) {
            pos = object.getBoundingClientRect();//参考坐标
            btnLeft = pos.left;
            btnTop = pos.top + pos.height * 9;
            tipTop = btnTop + pos.height;
            tipLeft = btnLeft - 5;
        } else {
            //当前浏览器不支持该方法
            var actualLeft = getElementLeft(object);
            var actualTop = getElementTop(object);
            btnLeft = actualLeft - scrollLeft;
            btnTop = actualTop - scrollTop + object.offsetWidth * 1.25;
            tipTop = btnTop + object.offsetHeight;
            tipLeft = btnLeft - 5;
        }

        cssStyle =
            ".pagePrint{\n" +
            "        background-color: white;\n" +
            "        border-radius: 50%;\n" +
            "        text-align: center;\n" +
            "        height: 4rem;\n" +
            "        width: 4rem;\n" +
            "        position: fixed;\n" +
            "        top: " + btnTop + "px;\n" +
            "        left: " + btnLeft + "px;\n" +
            "        z-index: 1000;\n" +
            "    }\n" +
            "    #printLogo{\n" +
            "        width:2rem;\n" +
            "        height:2rem;\n" +
            "        margin-top:1rem;\n" +
            "    }\n" +
            "    .tooltips{\n" +
            "        display: none;\n" +
            "        align-items: center;\n" +
            "        position: fixed;\n" +
            "        top: " + tipTop + "px;\n" +
            "        left: " + tipLeft + "px;\n" +
            "    }\n" +
            "    .tooltip-one {\n" +
            "        width: 0;\n" +
            "        height: 0;\n" +
            "        border-left: 6px solid transparent;\n" +
            "        border-right: 6px solid transparent;\n" +
            "        border-bottom: 12px solid black;\n" +
            "        margin-left: 20px;\n" +
            "    }\n" +
            "    .tooltip-two{\n" +
            "        background-color: black;\n" +
            "        color: white;\n" +
            "        font-size: 12px;\n" +
            "        width: 75px;\n" +
            "        height: 25px;\n" +
            "        text-align: center;\n" +
            "        border-radius: 5px;\n" +
            "        padding-top: 6px;\n" +
            "        margin-top: -5px;\n" +
            "    }";
    } else if (pageConfigure.currentPage == 5) {
        if (pageConfigure.pageHref.indexOf("question") != -1) {
            document.body.appendChild(div1);
            document.body.appendChild(div5);
            object = document.getElementsByClassName("codeBlock")[0];
            object01 = document.getElementsByClassName("codeIcon")[0];
            if (object) {
                pos = object.getBoundingClientRect();//参考坐标
                btnLeft = pos.left;
                btnTop = pos.top - pos.height - 3;
                btnWidth = pos.width * 0.935;
                tipTop = btnTop;
                tipLeft = btnLeft - btnWidth;
            } else {
                //当前浏览器不支持该方法
                var actualLeft = getElementLeft(object);
                var actualTop = getElementTop(object);
                btnLeft = actualLeft - scrollLeft;
                btnTop = actualTop - scrollTop + object.offsetWidth * 1.25;
                btnWidth = object.offsetWidth * 0.93;
                tipTop = btnTop;
                tipLeft = btnLeft - btnWidth;
            }
            var margin = (btnWidth - object01.offsetWidth) / 2;
            cssStyle =
                "    .printButton{\n" +
                "        position:fixed;\n" +
                "        top:" + btnTop + "px;\n" +
                "        left:" + btnLeft + "px;\n" +
                "        width:" + btnWidth + "px;\n" +
                "        height:" + btnWidth + "px;\n" +
                "        z-index:2;\n" +
                "        border: 1px solid #ddd;\n" +
                "        background: #f5f5f5;\n" +
                "        box-sizing: content-box;\n" +
                "    }\n" +
                "    #printLogo{\n" +
                "        width:" + object01.offsetWidth + "px;\n" +
                "        height:" + object01.offsetWidth + "px;\n" +
                "        margin:" + margin + "px;\n" +
                "    }\n" +
                ".tooltips{\n" +
                "        display: none;\n" +
                "        align-items: center;\n" +
                "        position: fixed;\n" +
                "        z-index: 3;\n" +
                "        top: " + tipTop + "px;\n" +
                "        left: " + tipLeft + "px;\n" +
                "    }\n" +
                "    .tooltip-one {\n" +
                "        width: 0;\n" +
                "        height: 0;\n" +
                "        border-top: 5px solid transparent;\n" +
                "        border-left: 10px solid black;\n" +
                "        border-bottom: 5px solid transparent;\n" +
                "        margin-left: 25px;\n" +
                "        margin-top: 5px;\n" +
                "    }\n" +
                "    .tooltip-two{\n" +
                "        background-color: black;\n" +
                "        color: white;\n" +
                "        font-size: 13px;\n" +
                "        width: 30px;\n" +
                "        height: 90px;\n" +
                "        text-align: center;\n" +
                "        border-radius: 5px;\n" +
                "        padding: 6px;\n" +
                "        margin-top: -15px;\n" +
                "    }";
        } else {
            parentDiv.appendChild(div);
            cssStyle =
                "    #printLogo{\n" +
                "        width:1.1em;\n" +
                "        height:1.1em;\n" +
                "    }\n";
        }
    } else if (pageConfigure.currentPage == 6) {
        document.body.appendChild(div);
        document.body.appendChild(div6);
        object = document.getElementsByClassName("dropdown")[5];
        if (object) {
            pos = object.getBoundingClientRect();//参考坐标
            btnLeft = pos.left;
            btnTop = pos.top + pos.height * 1;
            tipTop = btnTop + pos.height;
            tipLeft = btnLeft - 5;
        } else {
            object = document.getElementsByClassName("dropdown")[1];
            //当前浏览器不支持该方法
            var actualLeft = getElementLeft(object);
            var actualTop = getElementTop(object);
            btnLeft = actualLeft - scrollLeft;
            btnTop = actualTop - scrollTop + object.offsetWidth * 1.25;
            tipTop = btnTop + object.offsetHeight;
            tipLeft = btnLeft - 5;
        }

        cssStyle =
            ".pagePrint{\n" +
            "        background-color: white;\n" +
            "        border-radius: 50%;\n" +
            "        text-align: center;\n" +
            "        height: 2em;\n" +
            "        width: 2em;\n" +
            "        position: fixed;\n" +
            "        top: " + btnTop + "px;\n" +
            "        left: " + btnLeft + "px;\n" +
            "        z-index: 1000;\n" +
            "    }\n" +
            "#printLogo{\n" +
            "        width:1.2em;\n" +
            "        height:1.2em;\n" +
            "        margin-top:0.4em;\n" +
            "    }\n" +
            "    .tooltips{\n" +
            "        display: none;\n" +
            "        align-items: center;\n" +
            "        position: fixed;\n" +
            "        top: " + tipTop + "px;\n" +
            "        left: " + tipLeft + "px;\n" +
            "    }\n" +
            "    .tooltip-one {\n" +
            "        width: 0;\n" +
            "        height: 0;\n" +
            "        border-left: 6px solid transparent;\n" +
            "        border-right: 6px solid transparent;\n" +
            "        border-bottom: 12px solid black;\n" +
            "        margin-left: 20px;\n" +
            "    }\n" +
            "    .tooltip-two{\n" +
            "        background-color: black;\n" +
            "        color: white;\n" +
            "        font-size: 12px;\n" +
            "        width: 75px;\n" +
            "        height: 25px;\n" +
            "        text-align: center;\n" +
            "        border-radius: 5px;\n" +
            "        padding-top: 6px;\n" +
            "        margin-top: -5px;\n" +
            "    }";
    }
    let cssNode = document.createElement("style");
    cssNode.id = "THT_Style";
    cssNode.setAttribute("type", "text/css");
    cssNode.innerHTML = cssStyle;
    document.body.appendChild(cssNode);

    if (pageConfigure.currentPage != 3) {
        $(".printButton").click(function () {
            if (pageConfigure.currentPage == 0) {
                if (pageConfigure.pageHref.indexOf("/p") != -1) {
                    //先隐藏部分元素,然后打印。在打印完毕后再展示
                    Promise.all([removeImgLazyLoading('.Post-Main', 0), updateStyle()]).then(transformPDF);
                } else {
                    //表示是知乎讨论,知乎的讨论是采用懒加载的形式,每次增加五个
                    if (page2pdfClick == false) {//第一次点击时所有讨论都加上文章转PDF的文字
                        if (buttonCLickCount > 0) {
                            removeStyle();
                            buttonCLickCount--;
                        }
                        page2pdfClick = true;
                        addPrintText();
                        $(".printButton").text('取消转换');
                    } else {
                        var cssStyle =
                            "    .pageButtons{\n" +
                            "        display:none;\n" +
                            "    }";
                        addStyle(cssStyle);
                        page2pdfClick = false;
                        if (pageConfigure.pageHref.indexOf("/question") != -1) {
                            $(".printButton").text('文章转PDF');
                        }
                        buttonCLickCount++;
                    }
                }
            } else if (pageConfigure.currentPage == 1 || pageConfigure.currentPage == 4 || pageConfigure.currentPage == 5 || pageConfigure.currentPage == 6) {
                Promise.all([updateStyle()]).then(transformPDF);
            } else if (pageConfigure.currentPage == 2) {
                createParentEle(".ouvJEz", 0);
                Promise.all([updateStyle()]).then(transformPDF);
            }
        });
    } else {
        $("#printButton").click(function () {
            Promise.all([updateStyle()]).then(transformPDF);
        });
    }

    function updateStyle() {
        if (pageConfigure.currentPage == 0) {
            var parentDiv = $(".is-bottom")[0].parentElement;
            parentDiv.className = "articleComment";
            addStyle(".Post-Author{width:100%;}");
            addStyle(".FollowButton,.Reward,.Post-topicsAndReviewer,.RichContent-action,.articleComment,.RichContent-actions,.ContentItem-actions,.LabelContainer-wrapper,.css-d5ulu0-CatalogContainer{display:none !important;}");
        } else if (pageConfigure.currentPage == 1) {
            addStyle(".article-type-img,.blog-tags-box,.slide-content-box,.operating,#blog_detail_zk_collection,.article-heard-img,.read-count,#csdn-shop-window-top,#blogColumnPayAdvert{display:none !important;}\n");
            addStyle(".article-header-box,.baidu_pl{width:90% !important;}");
        } else if (pageConfigure.currentPage == 2) {
            addStyle("._3tCVn5,._1kCBjS,._19DgIp,._13lIbp,.d0hShY{display:none !important;}");
            addStyle(".rEsl9f{margin-bottom:5px;}");
        } else if (pageConfigure.currentPage == 3) {
            addStyle(".postDesc,#blog_post_info_block,#comment_form{display:none !important;}");
        } else if (pageConfigure.currentPage == 4) {
            addStyle(".tag-list-box,.extension-banner,.follow-button{display:none !important;}");
            addStyle(".author-info-block{margin-bottom:0rem !important;}");
        } else if (pageConfigure.currentPage == 5) {
            if (pageConfigure.pageHref.indexOf("blog") != -1) {
                addStyle(".article-box__group,.tags-box,.copyright-box,.action-box,.recommend-box{display:none !important;}");
                addStyle(".article-box__meta,.item-list{display:inline-flex;}");
                addStyle(".item{margin-right:1rem;}");
            } else if (pageConfigure.pageHref.indexOf("question") != -1) {
                addStyle(".tags,.poll-wrap,.additional-remarks,.segment{display:none !important;}");
            }
        } else if (pageConfigure.currentPage == 6) {
            addStyle(".functional-area-bottom,.flex-sm-row{display:none !important;}");
        }
    }

    function removeImgLazyLoading(parentDom, index) {
        let parentDiv = document.querySelectorAll(parentDom)[index];
        let img = parentDiv.getElementsByTagName('img');
        for (let i = 0; i < img.length; i++) {
            img[i].removeAttribute('loading');
            img[i].removeAttribute('data-lazy-status');
        }
    }

    // 文章转pdf
    function transformPDF() {
        if (pageConfigure.currentPage == 0) {
            $(".Post-Main").print({
                debug: false,
                importCSS: true,
                printContainer: true,
                operaSupport: true
            });
        } else if (pageConfigure.currentPage == 1) {
            $(".blog-content-box").print({
                debug: false,
                importCSS: true,
                printContainer: true,
                operaSupport: true
            });
        } else if (pageConfigure.currentPage == 2) {
            $("#jsPrint").print({
                debug: false,
                importCSS: true,
                printContainer: true,
                operaSupport: true
            });
        } else if (pageConfigure.currentPage == 3) {
            $("#post_detail").print({
                debug: false,
                importCSS: true,
                printContainer: true,
                operaSupport: true
            });
        } else if (pageConfigure.currentPage == 4) {
            $(".article").print({
                debug: false,
                importCSS: true,
                printContainer: true,
                operaSupport: true
            });
        } else if (pageConfigure.currentPage == 5) {
            if (pageConfigure.pageHref.indexOf("blog") != -1) {
                $(".article-box").print({
                    debug: false,
                    importCSS: true,
                    printContainer: true,
                    operaSupport: true
                });
            } else if (pageConfigure.pageHref.indexOf("question") != -1) {
                $(".article-detail").print({
                    debug: false,
                    importCSS: true,
                    printContainer: true,
                    operaSupport: true
                });
            }
        } else if (pageConfigure.currentPage == 6) {
            $(".card-body").print({
                debug: false,
                importCSS: true,
                printContainer: true,
                operaSupport: true
            });
        }
        if (pageConfigure.currentPage == 0 || pageConfigure.currentPage == 1 || pageConfigure.currentPage == 2 || pageConfigure.currentPage == 4) {//csdn特殊处理,需要两次removeStyle
            removeStyle();
            removeStyle();
        } else if (pageConfigure.currentPage == 5 && pageConfigure.pageHref.indexOf("blog") != -1) {
            removeStyle();
            removeStyle();
            removeStyle();
        } else if (hasAddStyle == true) {
            removeStyle();
        }
        safeWaitFunctionTT();
    }

    // 新增样式,去除局部打印区域中不要的元素
    function addStyle(style) {
        var newStyle = document.getElementById("THT_Style");
        newStyle.appendChild(document.createTextNode(style));
        hasAddStyle = true;
    }

    // 恢复样式
    function removeStyle() {
        var newStyle = document.getElementById("THT_Style");
        newStyle.removeChild(newStyle.lastChild);
        hasAddStyle = false;
    }

    //为现有节点添加新的父元素,便于操作当前节点
    function createParentEle(currentNode, newParentIndex) {
        var printDiv = $(currentNode)[newParentIndex];
        var parentNew = document.createElement("div");
        var parentID = "";
        if (pageConfigure.currentPage == 0) {
            parentID = 'newParentIndex' + newParentIndex;
        } else if (pageConfigure.currentPage == 2) {
            parentID = 'jsPrint';
        }
        parentNew.id = parentID;
        printDiv.parentNode.replaceChild(parentNew, printDiv);
        parentNew.appendChild(printDiv);
    }

    //需要使用offsetLeft,offsetTop方法。需要明确的是这两个方法都是当前元素相对于其父元素的位置,所以要得到相对于页面的距离需要循环计算。
    function getElementLeft(ele) {
        var actualLeft = ele.offsetLeft;
        var current = ele.offsetParent;
        while (current !== null) {
            actualLeft += current.offsetLeft;
            current = current.offsetParent;
        }
        return actualLeft;
    }

    function getElementTop(ele) {
        var actualTop = ele.offsetTop;
        var current = ele.offsetParent;
        while (current !== null) {
            actualTop += current.offsetTop;
            current = current.offsetParent;
        }
        return actualTop;
    }

    function hoverEvent() {
        if (pageConfigure.currentPage == 4 || pageConfigure.currentPage == 6) {
            $(".printButton").hover(function () {
                $(".tooltips").show(100);
            }, function () {
                $(".tooltips").hide(100);
            });
        } else if (pageConfigure.pageHref.indexOf("question") != -1) {
            $(".printButton").hover(function () {
                $(".tooltips").show(100);
            }, function () {
                $(".tooltips").hide(100);
            });
        }
    }

    function eventListener() {//归纳所有的事件监听到一个函数
        if (pageConfigure.currentPage == 0) {
            document.addEventListener('DOMNodeInserted', function () {//添加监听事件,检测是否发生懒加载
                var listItemLength = document.getElementsByClassName('List-item').length;
                if (opeArray.length == 0 || opeArray.includes(listItemLength) == false) {
                    opeArray.push(listItemLength);
                    if (page2pdfClick == true) {
                        addPrintText();
                    }
                }
            });
        }
    }

    function addPrintText() {
        //给每个讨论都加上打印的按钮,然后再打印
        let parentDiv = document.querySelectorAll('.AnswerItem-authorInfo');
        let temp = listItemNumber;
        for (let newIndex = temp; newIndex < parentDiv.length; newIndex++) {
            let div1 = document.createElement("div");
            let divId = "printButton" + newIndex;
            div1.innerHTML = '<p id="' + divId + '" style="color:#4e6ef2;font-size: 14px;cursor:pointer;">\n' +
                '        文章转PDF\n' +
                '    </p>';
            div1.className = "pageButtons";
            parentDiv[newIndex].appendChild(div1);
            let className1 = "printButton" + newIndex;

            $(document).on("click", "#" + className1, function () {
                let newParentId = "newParentIndex" + newIndex;
                createParentEle(".List-item", newIndex);
                let cssStyle2 = "\n" + "#" + newParentId + ",.ModalExp-content,.LabelContainer-wrapper,.css-1k5dpte,.ContentItem-actions{display:none;}" + "\n";
                addStyle(cssStyle2);
                // let buttonIndex = document.getElementById(className1).parentElement.parentElement.parentElement.parentElement.getAttribute('data-za-index');
                let buttonIndex = className1.substring(11);
                transformPDF1(buttonIndex);
            });
        }
        listItemNumber = parentDiv.length;
    }

    // 文章转pdf--讨论--知乎专用
    function transformPDF1(buttonIndex) {
        var printDiv = $(".AnswerItem")[buttonIndex];
        var parentNew = document.createElement("div");
        var parentID = 'printDiv' + buttonIndex;
        parentNew.id = parentID;
        printDiv.parentNode.replaceChild(parentNew, printDiv);
        parentNew.appendChild(printDiv);
        removeImgLazyLoading(".AnswerItem", buttonIndex);

        $("#" + parentID).print({
            debug: false,
            importCSS: true,
            printContainer: true,
            operaSupport: true
        });
        removeStyle();
    }

    //修改博客园导航栏的宽度
    function updateNavWidth() {
        if (pageConfigure.currentPage == 3) {
            let a = document.getElementById("pagePrint");
            let width = getComputedStyle(a).width.replace("px", "");
            let fontSize = getComputedStyle(a).fontSize.replace("px", "");
            if (fontSize >= 14 && fontSize * 6 > width) {
                let newCss = "\n#pagePrint{width:" + fontSize * 7.5 + "px !important;}\n"
                addStyle(newCss);
            }
        }
    }

    //写一个周期函数,检测文章转pdf的按钮有没有加上
    function safeWaitFunctionTT() {
        setInterval(function () {
            var a = document.getElementsByClassName("printButton");
            if (a.length == 0) {
                if (pageConfigure.currentPage == 1 || pageConfigure.currentPage == 2 || pageConfigure.currentPage == 3) {
                    parentDiv.appendChild(div);
                } else if (pageConfigure.currentPage == 4) {
                    document.body.appendChild(div4);
                } else if (pageConfigure.currentPage == 5) {
                    if (pageConfigure.pageHref.indexOf("blog") != -1) {
                        document.body.appendChild(div);
                    } else if (pageConfigure.pageHref.indexOf("question") != -1) {
                        document.body.appendChild(div1);
                        document.body.appendChild(div5);
                    }
                } else if (pageConfigure.currentPage == 6) {
                    document.body.appendChild(div6);
                } else if (pageConfigure.currentPage == 0) {
                    parentDiv.insertBefore(div, firstChild);
                }
                clearInterval();
            }
        }, 500);
    }

    eventListener();
    updateNavWidth();
    safeWaitFunctionTT();
    hoverEvent();
})
();