Как удалить обрезанный текст из PDF

#python #pdf

#python #PDF

Вопрос:

Мне нужно обрезать PDF, чтобы извлечь некоторую конкретную информацию из этого PDF-документа. Есть ли способ обрезать PDF и сохранить текст только внутри обрезанной области и удалить весь остальной текст за пределами обрезанной области?

Я попытался использовать pyPdf для его обрезки, используя следующий код.

 from pyPdf import PdfFileWriter, PdfFileReader

with open("in.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()
    print "document has %s pages." % numPages

    for i in range(numPages):
        page = input1.getPage(i)
        print page.mediaBox.getUpperRight_x(), page.mediaBox.getUpperRight_y()
        page.trimBox.lowerLeft = (25, 25)
        page.trimBox.upperRight = (225, 225)
        page.cropBox.lowerLeft = (50, 50)
        page.cropBox.upperRight = (200, 200)
        output.addPage(page)

    with open("out.pdf", "wb") as out_f:
        output.write(out_f)
  

Сам PDF-файл обрезается, но весь текст необрезанного PDF-файла сохраняется. Если я скопирую все содержимое нового PDF-файла, даже обрезанный (невидимый) текст также будет скопирован.

Комментарии:

1. можете ли вы предоставить тестовый PDF-файл? : D

2. но, если я правильно понимаю, вы не можете удалить текстовые данные напрямую с помощью обрезки pdf, невидимый контент по-прежнему доступен в потоке данных.

3. Привет, извините за поздний ответ. PDF, который я использую, можно найти здесь update.uu.se /~jolkkonen/pdf/CRC_TD.pdf

Ответ №1:

После того, как я поиграл с вашим PDF и обрезкой, я понял, что обрезать и удалять invisible данные невозможно.

В основном обрезка добавляет /CropBox [ 50 50 200 200 ] элемент в PDF, но фактические данные все еще остаются в PDF.

Подсказка: попробуйте извлечь свои данные без обрезки, а также, возможно, с помощью подобной библиотеки pdfminer , ghostscript или попробуйте PyPDF еще раз извлечь текст или получить контекстные поля.

Комментарии:

1. Это правильно, и это не из-за Python; это и есть обрезка PDF. Некоторые инструменты GUI выдают предупреждение об этом при использовании функции обрезки. Вам нужен другой подход, например. скопируйте каждый элемент страницы на новую страницу, сверяя его координаты с прямоугольником обрезки. Возможно, вам придется потерять некоторые элементы, которые наполовину вставлены, наполовину выведены, но это должно работать для большинства текстов.

2. @alexis зачем копировать, если вы можете текст extraxt и записать новый файл с этим содержимым: D

3. Цель этого — изолировать столбцы данных в PDF. Мне нужно проанализировать данные из PDF и преобразовать их в формат, который легко индексируется программным обеспечением. Проблема в том, что пустые места в таблице ничем не представлены. Поэтому, когда я извлекаю данные из PDF-файла, у меня нет возможности узнать, где находятся конкретные фрагменты данных в таблице. У меня была идея изолировать столбцы каждой страницы, чтобы я мог определить, где находятся пробелы, и проанализировать данные таким образом.

4. @Fabian, это зависит от вашей цели! Обычно вы обрезаете PDF, если хотите распространить PDF -файл, только без обрезанного содержимого. Если вы хотите извлечь текст, обрезка — неправильный подход.

5. @cnovrup, тогда вы сбились с курса! 🙂 Обрезка — это не правильный путь. Пожалуйста, отправьте новый вопрос и спросите о выполнении того, что вы написали в комментарии. (Предоставьте более подробную информацию об «изолировании столбцов данных»). Я полагаю, что существуют библиотеки PDF, которые могут предоставить вам структурированную таблицу, например.