// ==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...
})();