// ==UserScript== // @name Arxiv PDF Rename & Download // @name:zh-CN Arxiv PDF 一键下载并重命名 // @namespace http://tampermonkey.net/ // @version 1.0 // @description This script will generate a download buttom at the right-bottom of the website which download the pdf paper with a clear name. // @description:zh-CN 一键下载 Arxiv 上的 pdf 文件,并以清晰的命名格式重命名文件 // @author Omen // @license GPLv3 // @match https://arxiv.org/abs/* // @grant none // @icon https://arxiv.org/static/browse/0.3.4/images/icons/favicon-32x32.png // @downloadURL none // ==/UserScript== (function() { 'use strict'; const pageTitle = document.title; const illegalChars = /[\/\\:*?"<>|]/g; const cleanTitle = pageTitle.replace(illegalChars, ' '); const downloadButton = document.createElement('button'); downloadButton.textContent = 'Download'; downloadButton.style.position = 'fixed'; downloadButton.style.bottom = '10px'; downloadButton.style.right = '10px'; downloadButton.style.backgroundColor = 'red'; downloadButton.style.color = 'white'; downloadButton.style.border = 'none'; downloadButton.style.padding = '10px 20px'; downloadButton.style.cursor = 'pointer'; downloadButton.style.zIndex = '1000'; downloadButton.style.borderRadius = '5px'; downloadButton.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.2)'; downloadButton.addEventListener('click', () => { const pdfUrl = window.location.href.replace('/abs/', '/pdf/'); downloadButton.textContent = 'Downloading...'; downloadButton.disabled = true; downloadButton.style.backgroundColor = '#C62828'; fetch(pdfUrl) .then(response => response.blob()) .then(blob => { const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${cleanTitle}.pdf`; document.body.appendChild(a); a.click(); a.remove(); window.URL.revokeObjectURL(url); downloadButton.textContent = 'Done'; downloadButton.disabled = false; downloadButton.style.backgroundColor = '#E53935'; }).catch(error => { downloadButton.textContent = 'There has been a problem with fetch operation:'+ error; downloadButton.disabled = false; }); }); document.body.appendChild(downloadButton); })();