web-dev-qa-db-ja.com

PDFファイルからすべてのリンクを抽出する方法は?

標準では、リンクは注釈に隠れています(仕様のセクション12.5.6.5)。そこからアドレスを抽出するのは簡単です: 別のページへのリンクを抽出するPDF from PDF using Python =または他の方法 しかし、リンクはドキュメント内の特別なオブジェクトのように表示されるのではなく、 " http://blah-blah.com "のようなプレーンテキストとして表示されることがよくあります。抽出するだけでなく、注釈からのリンクですが、テキスト自体からのリンクですか?テキスト全体を検索して「http://」のような単語を見つけることができますが、より最適な解決策はありますか?PDF編集者はテキストを強調しています-リンクも、このテキストがハイパーリンクであることをどうやって知るのでしょうか?

11
m9_psy

残念ながら、注釈として保存されず、コンテンツテキストに埋め込まれただけのURLは、PDFで特別な可視性を持ちません。 PDFの全文を検索し、URLのパターンマッチングを行う以外に解決策はありません。

2
Rob Lyman

pdfxを作成しました。これは、まさにこの仕事のための小さなツールです。特定のPDFからすべてのPDFをダウンロードします。 Pythonで記述され、GPLv3ライセンスの下で オープンソース としてリリースされています: http://www.metachris.com/pdfx

pdfxツールを使用して、すべてのPDF URL、すべてのURL(-vを含む)を表示したり、参照されているすべてのPDFをダウンロードしたり(-dを使用)できます。 )::

$ pdfx 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'...

$ easy_install -U pdfxでインストールできます。

内部的には、pdfxは PyPDF2 、a Pythonライブラリを使用してPDFコンテンツを読み取り、次に 正規表現をすべてのURLに一致

19
Chris Hager

文字列 "somePDFfile.pdf" | grep http

13
ibisum