有没有办法使用 Node.js 使 PDF 不仅可以被 Chrome/Acrobat 访问?

问题描述 投票:0回答:1

我正在从可以在 Google Chrome 和 Adobe Acrobat 中打开的网站上抓取 PDF 附件,但如果我尝试使用 Mac 的“预览”应用程序打开文件,或者将 PDF 传递给下游服务,则会失败打开。

PDF 本身并没有“损坏”,因为我可以在 Chrome 中手动打开 PDF,打印为 PDF,然后根据需要在预览或其他位置打开它。 问题是,我没有任何自动化方法可以使这些 PDF 在我的应用程序中可用。我当前的想法是在本地下载该文件,使用 Puppeteer 或 Playwright 打开它,手动打印为 PDF,然后从那里使用它。我不太喜欢这种方法,因为它很慢而且容易出错。

有谁知道有哪些 Node.js 库可以让我“修复”这些 PDF?我不太确定 Chrome/Acrobat 的做法有何不同,但我希望有一种方法可以去除导致这些 PDF 不兼容的任何内容。

可以在

此处

找到 PDF 示例。

javascript node.js pdf web-scraping acrobat
1个回答
2
投票

已损坏。 为了找出到底出了什么问题,我还下载了

原始文件

。该文件没有显示相同的错误,它短了 7 个字节,其中的偏移量和长度是正确的。 将您的文件与原始文件进行比较,发现您的文件中的 RDF 元数据已被操纵:

如您所见,其中的字符串“http”已被“https”替换。这个替换在很多方面都是错误的:

首先,如果您更改 XMP 元数据范围内的 RDF 元数据,则您的更改不得触及

xpacket begin

...

xpacket end
范围之外的字节。但在您的情况下,范围的末尾以及此后的所有内容都已移动了七个字节,从而使那里的材料无效。
此外,更改本身是无意义的:将命名空间 URL 中的“http”更改为“https”不会使任何内容变得更安全,反而可能会阻止查找,从而损坏 XML。而将 

pdfx:_dlc_DocIdUrl

中的“https://”更改为“httpss://”显然是无稽之谈。

因此,您首先应该找出抓取过程(或其某些后处理)中的哪些内容会损坏元数据,然后将其关闭。

我必须更改上面的建议:显然(请参阅下面我的评论)您只有在请求和查看(可能包括 JavaScript 操作)带有下载链接的页面后不久才能获得有效的 PDF。

因此,看来您无法真正改进您的抓取工具,该网络服务器上发生了一些奇怪的事情。

© www.soinside.com 2019 - 2024. All rights reserved.