求助:如何从禁用下载选项的pdf.js查看器窗口下载PDF文件
求助:如何从禁用下载选项的pdf.js查看器窗口下载PDF文件
别着急,我完全理解你现在的困扰——遇到这种限制确实头疼,我给你几个亲测有效的方法,你可以挨个试试:
从开发者工具的Sources/Application面板找真实PDF链接
有时候Network面板可能因为缓存或者请求方式的问题找不到目标资源,但你可以换个路径试试:- 打开开发者工具(按F12或者右键页面选「检查」)
- 切换到「Sources」面板,展开「Page」目录,仔细找带有
.pdf后缀的文件,或者找加载pdf.js的嵌套框架(iframe)里的资源 - 找到目标PDF资源后右键点击,选择「Open in new tab」,新标签页打开后就能直接下载了
- 如果Sources里没找到,试试「Application」面板,展开「Frames」->「Top」->「Documents」,里面大概率藏着PDF的真实地址
用Console执行脚本直接触发下载
pdf.js有个全局的PDFViewerApplication对象,里面存着文档的核心信息,我们可以利用它来绕开下载限制:- 打开开发者工具的「Console」面板
- 粘贴这段代码并回车:
if (typeof PDFViewerApplication !== 'undefined') { const pdfUrl = PDFViewerApplication.url; const downloadLink = document.createElement('a'); downloadLink.href = pdfUrl; downloadLink.download = 'downloaded_document.pdf'; // 可以自定义你想要的文件名 document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }这段代码会自动获取PDF的真实地址,创建一个隐藏的下载按钮并触发点击,直接开始下载。哪怕PDF是Blob格式的,这个方法同样有效。
利用cURL带上登录Cookie下载
因为网站有登录门户,wget没法直接复用登录状态,但我们可以借助浏览器的Cookie来绕过验证:- 打开开发者工具的「Network」面板,刷新页面,找到任意一个和PDF加载相关的请求(或者随便找一个登录后发起的请求)
- 右键这个请求,选择「Copy」->「Copy as cURL」
- 打开终端,把复制的命令粘贴进去,最后加上
-o your_file_name.pdf(指定保存的文件名),回车运行就能下载了
这个方法会自动带上你浏览器里的登录Cookie,所以能正常访问需要权限的PDF。
备选:打印页面保存为PDF
如果上面的方法都不行,可以试试打印功能作为兜底:- 按Ctrl+P(Mac是Cmd+P)打开打印界面
- 在「目标打印机」里选择「Save as PDF」
- 如果网站禁用了打印,你可以回到开发者工具的「Elements」面板,找到页面的body元素,修改它的样式(比如把
display: none或者visibility: hidden改成display: block),或者直接删除页面里的打印限制样式(通常在@media print规则里)
备注:内容来源于stack exchange,提问作者Parag




