【问题标题】:Extracting links to pages in another PDF from PDF using Python or other method使用 Python 或其他方法从 PDF 中提取指向另一个 PDF 中页面的链接
【发布时间】:2011-05-12 04:58:46
【问题描述】:

我有 5 个 PDF 文件,每个文件都有指向另一个 PDF 文件中不同页面的链接。这些文件是大型 PDF 的每个目录(每个大约 1000 页),使手动提取成为可能,但非常痛苦。到目前为止,我已经尝试在 Acrobat Pro 中打开该文件,并且可以右键单击每个链接并查看它指向的页面,但我需要以某种方式提取所有链接。我不反对对链接进行大量的进一步解析,但我似乎无法以任何方式将它们拉出来。我尝试将 Acrobat Pro 中的 PDF 导出为 HTML 或 Word,但两种方法都无法维护链接。

我无能为力,任何帮助都会很棒。我喜欢使用 Python 或其他一系列语言

【问题讨论】:

  • 更新:遗憾的是,这些方法都没有奏效。对于那些有类似问题的人,我最终做的是使用带有 Acrobat Pro 的 AutoBookmark 插件并将链接导出到文件,然后解析文件。像魅力一样工作

标签: python pdf


【解决方案1】:

使用 pyPdf 查找 URI,

import pyPdf

f = open('TMR-Issue6.pdf','rb')

pdf = pyPdf.PdfFileReader(f)
pgs = pdf.getNumPages()
key = '/Annots'
uri = '/URI'
ank = '/A'

for pg in range(pgs):

    p = pdf.getPage(pg)
    o = p.getObject()

    if o.has_key(key):
        ann = o[key]
        for a in ann:
            u = a.getObject()
            if u[ank].has_key(uri):
                print u[ank][uri]

给予,

http://www.augustsson.net/Darcs/Djinn/
http://plato.stanford.edu/entries/logic-intuitionistic/
http://citeseer.ist.psu.edu/ishihara98note.html

etc...

我找不到包含指向另一个 pdf 的链接的文件,但我怀疑 URI 字段应该包含 file:///myfiles 形式的 URI

【讨论】:

  • 您可能还想看看pdf.getNamedDestinations() 方法。
  • 这个包已经被PyPDF2取代了。导入语句应更改为import PyPDF2(但其他一切都很好)。
【解决方案2】:

我刚刚为此制作了一个小型 Python 工具,用于列出/下载给定 PDF 中所有引用的 PDF:https://www.metachris.com/pdfx/(也:https://github.com/metachris/pdfx

$ ./pdfx.py https://weakdh.org/imperfect-forward-secrecy.pdf -d ./
Reading url 'https://weakdh.org/imperfect-forward-secrecy.pdf'...
Saved pdf as './imperfect-forward-secrecy.pdf'
Document infos:
- CreationDate = D:20150821110623-04'00'
- Creator = LaTeX with hyperref package
- ModDate = D:20150821110805-04'00'
- PTEX.Fullbanner = This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) kpathsea version 6.1.1
- Producer = pdfTeX-1.40.14
- Title = Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice
- Trapped = False
- Pages = 13

Analyzing text...
- URLs: 49
- URLs to PDFs: 17

JSON summary saved as './imperfect-forward-secrecy.pdf.infos.json'

Downloading 17 referenced pdfs...
Created directory './imperfect-forward-secrecy.pdf-referenced-pdfs'
Downloaded 'http://cr.yp.to/factorization/smoothparts-20040510.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/smoothparts-20040510.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35517.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35517.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35514.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35514.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35519.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35519.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35522.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35522.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35509.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35509.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35528.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35528.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35513.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35513.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35533.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35533.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35551.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35551.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35527.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35527.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35520.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35520.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35526.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35526.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35515.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35515.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35529.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35529.pdf'...
Downloaded 'http://cryptome.org/2013/08/spy-budget-fy13.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/spy-budget-fy13.pdf'...
Downloaded 'http://www.spiegel.de/media/media-35671.pdf' to './imperfect-forward-secrecy.pdf-referenced-pdfs/media-35671.pdf'...

该工具使用PyPDF2,事实上的 Python 标准库来读取 PDF 内容,regular expression to match all urls,如果您使用 -d 选项运行它,则为每个 PDF 启动一个下载线程(对于 --download-pdfs )。

【讨论】:

    【解决方案3】:

    如果您不能使用 Python,但有像 qpdf 这样的解压 PDF 内部对象流的方法,您可以使用 grep 获取 URI:

    qpdf --qdf --object-streams=disable input.pdf - | grep -Poa '(?<=/URI \().*(?=\))'
    

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 2013-11-28
      • 2015-03-20
      • 2013-01-27
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多