// ==UserScript== // @name 道客巴巴PDF下载 // @namespace https://docs.scriptcat.org/ // @version 0.1.0 // @require https://cdn.bootcss.com/jquery/3.5.1/jquery.min.js // @require https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js // @require https://cdn.jsdelivr.net/npm/jspdf@2.5.1/dist/jspdf.umd.min.js // @description 道客巴巴文档下载 道客巴巴PDF下载 PDF下载道客巴巴 // @author 行者无忌 // @match *://www.doc88.com/p-* // @noframes // @license MIT // ==/UserScript== (function() { 'use strict'; const css = css => { const myStyle = document.createElement('style'); myStyle.textContent = css; const doc = document.head || document.documentElement; doc.appendChild(myStyle); } css(`#xiazai { cursor:pointer; position:fixed; top:200px; left:0px; z-index:2147483647; width: 80px; height: 80px; border-radius: 100px; box-shadow: 6px 7px 20px 3px #eaeaea; text-align: center; margin: auto; line-height: 80px; font-size: 14px; color: white; background: linear-gradient(-134deg, red, blue); }`); const html = $(`
下载
`); $("body").append(html); //道客巴巴非打印区域的所有元素 const doc_ele = ['#continueButton', '#continue_page','#header', '#toolbar', '#box1', '#boxright', '#readEndDiv', '.commonbox1', '#commentDiv', '.clearfix', '#footer', '.dk-bg', '.toplayer-shop', '.activelist','#zuihuitao','#xiazai' ] //点击下载 $("#xiazai").bind("click", () => { let retime = setInterval(function () { const totalH = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); const nowY = $(window).scrollTop(); const viewH = $(window).height(); // 已经滚到底就停止 if (nowY + viewH >= totalH) { clearInterval(retime); if (confirm('所有界面加载完成,是否打印?')) { main(); } return; } // 每次向下滚动500px $('html, body').animate({ scrollTop: nowY + 500 }, 150); }, 500); retime() }); const main = () => { //清除影响pdf打印的元素 $.each(doc_ele, (_, sel) => $(sel).remove()); // 打印前强制页面置顶,根除滚动偏移导致首页空白 window.scrollTo(0, 0); document.documentElement.scrollTop = 0; document.body.scrollTop = 0; let printStyle = document.createElement('style'); printStyle.media = 'print'; printStyle.textContent = ` @media print { /* 极小边距,最大化纸张可用宽度 */ @page { size: A3; margin: 1mm; marks: none; print-color-adjust: exact; } /* 全局清除边框、内外边距,消除左右竖线 */ * { border: none !important; border-left: 0 !important; border-right: 0 !important; outline: none !important; box-shadow: none !important; margin: 0 !important; padding: 0 !important; -webkit-font-smoothing: antialiased !important; -moz-osx-font-smoothing: grayscale !important; } html, body { width: 100% !important; max-width: 100% !important; margin: 0 !important; padding: 0 !important; box-sizing: border-box !important; transform: translateY(0) !important; position: static !important; } /* 核心:强制所有外层容器100%宽度铺满,禁止固定宽度居中收缩 */ body > div, main, .content, .page-box, .article-wrap, div[class*="box"] { width: 100% !important; max-width: 100% !important; margin: 0 auto !important; margin-left: 0 !important; margin-right: 0 !important; padding-left: 1mm !important; padding-right: 1mm !important; box-sizing: border-box !important; page-break-before: avoid !important; } p, div, span, img { max-width: 100% !important; width: auto !important; box-sizing: border-box !important; } /* Canvas高清防模糊 */ canvas { max-width: 100% !important; image-rendering: crisp-edges !important; image-rendering: -webkit-optimize-contrast !important; -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; } canvas, section, table { page-break-inside: avoid !important; } body { page-break-after: avoid !important; } } `; document.head.appendChild(printStyle); window.print(); } // Your code here... })();