как проверить ссылки в файле PDF - PullRequest
0 голосов
/ 12 ноября 2011

У меня есть файл PDF, который я хочу проверить, правильны ли ссылки в нем.Правильно в этом смысле - все указанные URL-адреса связаны с веб-страницами и ничего не нарушено.Я ищу простую утилиту или скрипт, который может легко это сделать?stackoverflow также.Но ничего полезного пока не нашел.Так что хотелось бы, чтобы кто-нибудь имел представление об этом!

Обновлено: чтобы прояснить вопрос.

Ответы [ 5 ]

4 голосов
/ 19 ноября 2011

Я предлагаю сначала использовать утилиту командной строки linux 'pdftotext' - вы можете найти страницу справочника:

Страница справочника pdftotext

Утилита является частьюXpdf коллекция инструментов обработки PDF, доступная в большинстве дистрибутивов Linux.См. http://foolabs.com/xpdf/download.html.

После установки вы можете обработать PDF-файл с помощью pdftotext:

pdftotext file.pdf file.txt

После обработки простой Perl-скрипт, который ищет в полученном текстовом файле URL-адреса http и получаетиспользуя LWP :: Simple .LWP :: Simple-> get ('http: // ...') позволит вам проверять URL с помощью фрагмента кода, такого как:

use LWP::Simple;
$content = get("http://www.sn.no/");
die "Couldn't get it!" unless defined $content;

Это позволит выполнить то, что вы хотите сделать,Я думаю.Существует множество ресурсов о том, как писать регулярные выражения для соответствия URL-адресам http, но очень простое будет выглядеть так:

m/http[^\s]+/i

«http, за которым следует один или несколько непробельных символов» - при условии, чтоURL-адреса являются закодированными URL-адресами свойств.

2 голосов
/ 11 февраля 2017

Вы можете использовать pdf-link-checker

pdf-link-checker - простой инструмент, который анализирует документ PDF и проверяет наличие битых гиперссылок.Это делается путем отправки простых HTTP-запросов на каждую ссылку, найденную в данном документе.

Чтобы установить его в GNU / Linux:

pip install pdf-link-checker

К сожалению, одна зависимость (pdfminer) сломано.Чтобы это исправить:

pip uninstall pdfminer
pip install pdfminer==20110515
1 голос
/ 12 ноября 2011

Есть два вопроса о вашем вопросе.

Вы ищете подтверждение регулярного выражения, что ссылка содержит ключевую информацию, такую ​​как http: //, и действительные коды TLD? Если это так, я уверен, что эксперт по регулярным выражениям заскочит или заглянет на regexlib.com , который содержит множество существующих регулярных выражений для работы с URL.

Или вы хотите проверить, существует ли веб-сайт, тогда я бы порекомендовал Python + Requests , поскольку вы можете составить сценарий проверки, чтобы увидеть, существуют ли веб-сайты и не возвращают ли коды ошибок.

Это задача, которую я сейчас выполняю для почти такой же цели на работе. У нас есть около 54 тыс. Ссылок для автоматической обработки.

0 голосов
/ 11 декабря 2018

https://stackoverflow.com/a/42178474/1587329's Совет был вдохновением для написания этого простого инструмента (см. Гист ):

'''loads pdf file in sys.argv[1], extracts URLs, tries to load each URL'''
import urllib
import sys

import PyPDF2

# credits to stackoverflow.com/questions/27744210
def extract_urls(filename):
    '''extracts all urls from filename'''
    PDFFile = open(filename,'rb')
    PDF = PyPDF2.PdfFileReader(PDFFile)
    pages = PDF.getNumPages()

    key = '/Annots'
    uri = '/URI'
    ank = '/A'

    for page in range(pages):
        pageSliced = PDF.getPage(page)
        pageObject = pageSliced.getObject()
        if pageObject.has_key(key):
            ann = pageObject[key]
            for a in ann:
                u = a.getObject()
                if u[ank].has_key(uri):
                    yield u[ank][uri]


def check_http_url(url):
    urllib.urlopen(url)


if __name__ == "__main__":
    for url in extract_urls(sys.argv[1]):
        check_http_url(url)

Сохранить в filename.py, запустить как python filename.py pdfname.pdf.

0 голосов
/ 12 ноября 2011
  1. Сбор ссылок по:
    перечислению ссылок с использованием API, дампу в виде текста и связыванию результата или сохранению в виде HTML PDFMiner .

  2. Сделайте запросы, чтобы проверить их:
    Есть множество вариантов в зависимости от ваших потребностей.

...