NSFC_conclusion_downloader

帮助你直接下载国自然结题报告

目前為 2021-08-16 提交的版本,檢視 最新版本

// ==UserScript==
// @name         NSFC_conclusion_downloader
// @namespace    https://blog.rhilip.info/
// @version      1.0
// @description  帮助你直接下载国自然结题报告
// @author       Rhilip
// @match        http://output.nsfc.gov.cn/conclusionProject/*
// @match        http://kd.nsfc.gov.cn/baseQuery/conclusionProject/*
// @require      https://unpkg.com/[email protected]/dist/jspdf.umd.min.js
// ==/UserScript==

/* globals $, jspdf */
(function() {
    'use strict';

    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'
            })

            // 核心下载方法
            const image = new Image();
            for (let i=1;;i++) {
                downloadBtn.text(`正在下载第 ${i} 页`);

                // 获得图片链接
                const { data: requestData } = await $.post('/baseQuery/data/completeProjectReport', {id: dependUintID, index: i});

                // 加载图片并获得图片的 width, height 属性
                image.src = requestData.url;
                await image.decode();

                // 将图片添加进PDF中
                doc.addPage([image.width, image.height], image.width < image.height ? 'p' : 'l');
                doc.addImage(image, "PNG", 0, 0, image.width, image.height);

                if (!requestData.hasnext) break;
            }

            // 我们并没法 await 保存过程,所以直接显示下载完成就好,浏览器处理好会自动显示下载文件
            doc.save(`${projectID} ${projectName}.pdf`);
            downloadBtn.text('下载完成');
        }
    })
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址