🎉 欢迎访问GreasyFork镜像站!本站由公众号【爱吃馍】维护。 联系邮箱📮
💡 当前页面为缓存版本 (获取时间: 2025/12/22 06:31:43)。新内容正在后台静默同步中...

Greasy fork 爱吃馍镜像

PDF.js In-Memory PDF Downloader

Adds a floating button to download PDFs rendered by PDF.js viewers directly from memory.

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

安装遇到问题?关注公众号【爱吃馍】获取帮助

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Zateb bir user-style yöneticim var, yükleyeyim!)

安装遇到问题?关注公众号【爱吃馍】获取帮助

// ==UserScript==
// @name         PDF.js In-Memory PDF Downloader
// @namespace    https://greasyfork.org/users/Daeron
// @version      1.0
// @description  Adds a floating button to download PDFs rendered by PDF.js viewers directly from memory.
// @author       Daeron
// @match        *://*/*
// @grant        none
// @run-at       document-idle
// @icon         https://mozilla.github.io/pdf.js/images/logo.svg
// @license      No license
// ==/UserScript==

(function() {
    'use strict';

    // Create a floating download button for a PDF Blob
    function createDownloadButton(blob) {
        const button = document.createElement('button');
        button.textContent = 'Download PDF';
        Object.assign(button.style, {
            position: 'fixed',
            bottom: '20px',
            right: '20px',
            zIndex: 9999,
            padding: '10px 15px',
            background: '#007bff',
            color: '#fff',
            border: 'none',
            borderRadius: '5px',
            cursor: 'pointer',
            boxShadow: '0 2px 6px rgba(0,0,0,0.3)'
        });

        button.addEventListener('click', () => {
            const url = URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = `downloaded_${Date.now()}.pdf`;
            document.body.appendChild(a);
            a.click();
            a.remove();
            URL.revokeObjectURL(url);
            button.remove();
        });

        document.body.appendChild(button);
    }

    // Try to attach a PDF download button if PDF.js is loaded
    function tryAttachPDFButton() {
        const app = window.PDFViewerApplication;
        if (app && app.pdfDocument) {
            app.pdfDocument.getData()
                .then(data => {
                    const blob = new Blob([data], { type: 'application/pdf' });
                    createDownloadButton(blob);
                    console.log('PDF.js: PDF detected and download button created.');
                })
                .catch(e => console.warn('PDF.js: Failed to get PDF data:', e));
            return true;
        }
        return false;
    }

    // Poll every second until PDF.js is loaded and PDF is available
    const interval = setInterval(() => {
        if (tryAttachPDFButton()) {
            clearInterval(interval);
        }
    }, 1000);

})();