下载道客巴巴里面的文章 -- 测试中

下载道客巴巴里面的文章

  1. // ==UserScript==
  2. // @name 下载道客巴巴里面的文章 -- 测试中
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1.8
  5. // @description 下载道客巴巴里面的文章
  6. // @author You
  7. // @match https://www.doc88.com/p-*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. [
  12. 'https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.3.0/jspdf.umd.min.js',
  13. 'https://cdnjs.cloudflare.com/ajax/libs/jszip/3.5.0/jszip.js',
  14. 'https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.js'
  15. ].forEach(link => {
  16. let script = document.createElement('script');
  17. script.src = link;
  18. script.type = 'text/javascript';
  19. document.getElementsByTagName('head')[0].appendChild(script);
  20. });
  21.  
  22. (function() {
  23. var $ = window.$;
  24.  
  25. let btn = `<button id="download-pngs" style="position:fixed; bottom:1rem;left:1rem;z-index:99999;">Download As PNGs</button>`,
  26. form = `
  27. <form id="download-pdf" style="position:fixed;bottom:3rem;left:1rem;z-index:99999;padding:3px;border:1px solid black;background:white;">
  28. <section style="margin:1rem 0rem;">
  29. <input type="radio" id="paper-size-raw" name="paper-size" value="raw" required checked>
  30. <label for="paper-size-a4">原始比例</label>
  31. <input type="radio" id="paper-size-a4" name="paper-size" value="a4" required>
  32. <label for="paper-size-a4">A4 大小</label>
  33. </section>
  34. <button type="submit">
  35. download as PDF
  36. </button>
  37. </form>
  38. `;
  39.  
  40. $('body').append(btn).append(form);
  41.  
  42. $(`#download-pngs`).click(() => {
  43. document.getElementById("download-pngs").disabled = true;
  44. let zip = window.JSZip();
  45. $('canvas[id^="page_"]').each((index, page) => {
  46. let base64 = page.toDataURL();
  47. let blob = atob(base64.split(',')[1]);
  48. zip.file(`${index.toString()}.png`, blob, {binary: true});
  49. });
  50. zip.generateAsync({type:"blob"})
  51. .then((content) => {
  52. window.saveAs(content, `${$('title').text()}.zip`);
  53. document.getElementById("download-pngs").disabled = false;
  54. });
  55. });
  56.  
  57. $(`#download-pdf`).submit((e) => {
  58. e.preventDefault();
  59. if(confirm(`请确认你已将文章所有的页面都加载出来了!`)){
  60. let is_ask_for_raw_proportion = $(`#paper-size-raw`).is(':checked'),
  61. orientation = $('#page_1').width() > $('#page_1').height() ? 'l' : 'p',
  62. { jsPDF } = window.jspdf;
  63.  
  64. let doc = is_ask_for_raw_proportion ?
  65. new jsPDF(orientation, 'mm', [$('#page_1').attr('height'), $('#page_1').attr('width')]) :
  66. new jsPDF(orientation, 'mm', 'a4');
  67.  
  68. let width = doc.internal.pageSize.getWidth(),
  69. height = doc.internal.pageSize.getHeight();
  70. $('[id^="page_"]').each((index, page) => {
  71. doc.addImage(page.toDataURL(), 'JPEG', 0, 0, width, height);
  72. if (index !== ($('[id^="page_"]').length - 1)) {
  73. doc.addPage();
  74. }
  75. });
  76. doc.save(`${$('title').text()}.pdf`);
  77.  
  78. }
  79. });
  80. })();