![这个 PDF 可以下载到内部存储吗?](https://linux22.com/image/1624112/%E8%BF%99%E4%B8%AA%20PDF%20%E5%8F%AF%E4%BB%A5%E4%B8%8B%E8%BD%BD%E5%88%B0%E5%86%85%E9%83%A8%E5%AD%98%E5%82%A8%E5%90%97%EF%BC%9F.png)
有一个网站,上面有公开的信息,人们可以随时随地分享这些信息,但只能通过截屏。我想将其保存为 pdf 格式并保存在我的设备中以供将来参考。
我尝试在网上寻找方法,但没有找到任何有用的方法。
这是我想要下载的 PDF 的链接:https://www.ibps.in/pdfview.html?pdfNameaHR0cHM6Ly93d3cuaWJwcy5pbi93cC1jb250ZW50L3VwbG9hZHMvQ1JQLVBPLUlYdmdndi1OT1RJQ0UucGRm
与其将其作为屏幕截图保存到我的存储中,不如将其保存为 PDF 以供将来使用,这样对用户更加方便。
注意:如果您通过智能手机访问链接或尝试使用 Google Chrome 打开它,则需要很长时间才能加载。我不得不使用 Safari 打开链接,它立即打开了。
修改 1:有些人在网站上找不到此链接。要了解如何访问此链接,请观看此视频,我录制了一个小视频。请使用此链接: https://youtu.be/cpAWQIPOIOg
超级用户请注意:我很惊讶地发现,尽管这是一个真正的问题,但它却没有得到应有的关注。人们没有尝试就认为链接已过期或网站已死,但事实并非如此。我接受的答案显示了问题的深度。有时非常好的问题最终得不到任何赞成票,这很可悲。完全没想到超级用户的回复会这样。
答案1
该网站的网址可以分解为https://www.ibps.in/pdfview.html?pdfName(base64 encoded URL of the PDF)
解码最后一部分(使用任何众多在线 base64 解码器之一),然后您就会获得链接。
我无法验证它是否正确,因为页面本身的 pdf 无法加载(Chrome 拒绝加载 MIME 类型为“application/octet-stream”而不是“text/javascript”的 js 脚本)
编辑以扩展我如何发现该链接:
我使用 Chrome 的检查功能打开了网站源代码,然后开始阅读试图显示 pdf 的 JavaScript。源代码末尾有部分内容:
/**
* Asynchronously downloads PDF.
*/
PDFJS.getDocument(url).then(function (pdfDoc_)
url 参数看起来很有希望,所以我查看了它的定义位置:
var url = Base64.decode(getParameterByName('pdfName'));
函数 getParameterByName:
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
此函数接受您指定的参数名称,转义所有方括号(在任何 [ 和 ] 字符前添加 \),并将其添加到正则表达式中,该正则表达式查找类似于(在此示例中)的字符串?pdfName=(any string not containing & or #)
。您可以看到正则表达式的工作原理这里。
pdfview.html
然后,函数抓取(使用)之后的网站 URL 部分location.search
,并将它之前创建的正则表达式应用于它,如果匹配,则返回 = 字符之后的部分。
这就是一切都有点崩溃的地方,因为提供的 URL 不包含任何 = 字符,并且函数返回一个空字符串,但这就是人类模式匹配能力比计算机更好的地方——很容易看出 URL 包含部分?pdfName
,所以其余部分可能是我们正在寻找的参数。剩下的就是将字符串放入aHR0cHM6Ly93d3cuaWJwcy5pbi93cC1jb250ZW50L3VwbG9hZHMvQ1JQLVBPLUlYdmdndi1OT1RJQ0UucGRm
Base64 解码器中,我很高兴地看到 PDF 文件的有效 URL。我还怀疑,尽管名称如此,但脚本中使用的 Base64 解码器并不是完全标准的,所以我从页面源代码(var Base64={...
)中复制了它的定义,将其粘贴到 Chrome DevTools 的控制台中并运行
Base64.decode('aHR0cHM6Ly93d3cuaWJwcy5pbi93cC1jb250ZW50L3VwbG9hZHMvQ1JQLVBPLUlYdmdndi1OT1RJQ0UucGRm')
以验证我得到了相同的答案。
抱歉,如果这个太高级了,但是一旦你发现如何获取一个链接,使用相同的方法获取其他链接就很简单了:只需将部分地址复制?pdfName
到base64 解码器并点击解码以获取 PDF 链接。
答案2
答案3
一般来说,在 MacOS 上,你可以使用 PDF 打印机打印网页(默认)。在 Windows 上,如果你有 PDF 打印机,你也可以打印为 PDF。
如果您想将网页存储为 PDF 文件,只需将其打印为 PDF 即可。
然后您可以使用 PDF 操作工具合并页面。