您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
帮助你直接下载国自然结题报告
当前为
// ==UserScript== // @name NSFC_conclusion_downloader // @namespace https://blog.rhilip.info/ // @version 0.5 // @description 帮助你直接下载国自然结题报告 // @author Rhilip // @match http://output.nsfc.gov.cn/conclusionProject/* // @require https://unpkg.com/[email protected]/dist/jspdf.umd.min.js // ==/UserScript== (function() { 'use strict'; // 加载图片获得图片的width, height 属性 function asyncImageLoader(url){ return new Promise((resolve, reject) => { var image = new Image(); image.src = url; image.onload = () => resolve(image); image.onerror = () => reject(new Error('could not load image')); }) } const conclusionReportTab = $('#conclusion-report-tab'); // 定位结题报告窗口 const downloadBtn = $('<button id="download_report" type="button" class="btn btn-link pull-right text-nowrap">(下载全文PDF)</button>'); // 准备交互按钮 conclusionReportTab.before(downloadBtn); // 添加交互按钮 downloadBtn.click((async () => { downloadBtn.prop('disabled', true); if (!/该项目暂无结题报告/.test(conclusionReportTab.text())) { // 获得项目信息: 编号(加密后)、批准号、项目名称 const dependUintID = location.pathname.match(/conclusionProject\/(.+)/)[1]; const projectID = $('#basic-tab > div:nth-child(1) > div.col-md-10').text(); const projectName = $('#basic-tab > div:nth-child(2) > div.col-md-10').text(); // 准备需要的PDF文件 const { jsPDF } = jspdf; const doc = new jsPDF(); doc.deletePage(1); doc.setDocumentProperties({ title: `${projectID} ${projectName}`, subject: `${location.origin}${location.pathname}`, creator: 'NSFC_conclusion_downloader' }) // 核心下载方法 let i = 1; let should_loop = true; while (should_loop) { downloadBtn.text(`正在下载第 ${i} 页`); const { data: requestData } = await $.post('http://output.nsfc.gov.cn/baseQuery/data/completeProjectReport', {id: dependUintID, index: i}); const image = await asyncImageLoader(requestData.url); doc.addPage([image.width, image.height], image.width < image.height ? 'p' : 'l'); doc.addImage(image, "JPEG", 0, 0, image.width, image.height); should_loop = requestData.hasnext !== false; i++; } // 我们并没法 await 保存过程,所以直接显示下载完成就好,浏览器处理好会自动显示下载文件 doc.save(`${projectID} ${projectName}.pdf`); downloadBtn.text('下载完成'); } })) })();