Как удалить обрезанный текст из 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-файла, копируется даже обрезанный (невидимый) текст.


person cnovrup    schedule 21.04.2019    source источник
comment
можете предоставить тестовый pdf? :D   -  person Fabian    schedule 22.04.2019
comment
но если я правильно понимаю, вы не можете удалить текстовые данные напрямую, обрезав PDF-файл, невидимый контент по-прежнему доступен в потоке данных.   -  person Fabian    schedule 22.04.2019
comment
Привет, извините за поздний ответ. PDF-файл, который я использую, можно найти здесь update.uu.se/~ Йолкконен/pdf/CRC_TD.pdf   -  person cnovrup    schedule 23.04.2019


Ответы (1)


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

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

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

person Fabian    schedule 23.04.2019
comment
Это правильно, и это не из-за Python; вот что такое обрезка PDF. Некоторые инструменты с графическим интерфейсом предупредят об этом, когда вы используете функцию обрезки. Вам нужен другой подход, например. скопируйте каждый элемент страницы на новую страницу, сверив его координаты с прямоугольником обрезки. Возможно, вам придется потерять некоторые элементы, которые находятся наполовину внутри, наполовину снаружи, но это должно работать для большей части текста. - person alexis; 23.04.2019
comment
@alexis, зачем копировать, если можно извлечь текст и написать новый файл с этим содержимым: D - person Fabian; 23.04.2019
comment
Цель этого состоит в том, чтобы изолировать столбцы данных в PDF. Мне нужно проанализировать данные из PDF и преобразовать их в формат, который легко индексируется программным обеспечением. Проблема в том, что пустые места в таблице ничем не представлены. Поэтому, когда я извлекаю данные из PDF-файла, у меня нет возможности узнать, где в таблице находятся конкретные фрагменты данных. У меня была идея изолировать столбцы на каждой странице, чтобы я мог определить, где находятся пробелы, и таким образом анализировать данные. - person cnovrup; 23.04.2019
comment
@ Фабиан, это зависит от твоей цели! Обычно вы обрезаете PDF-файл, если хотите распространять файл PDF, только без обрезанного содержимого. Если вы хотите извлечь текст, обрезка — неправильный подход. - person alexis; 23.04.2019
comment
@cnovrup, тогда ты не в себе! :-) Обрезка - не выход. Пожалуйста, опубликуйте новый вопрос и спросите о том, что вы написали в комментарии. (Дайте более подробную информацию об изоляции столбцов данных). Я считаю, что есть библиотеки PDF, которые могут дать вам, например, структурированную таблицу. - person alexis; 23.04.2019
comment
Я понимаю что ты имеешь ввиду. Похоже, я выбрал гораздо более сложный подход, чем должен был быть. Я посмотрю на некоторые из этих библиотек. Вы знаете что-нибудь, что могло бы сработать? В любом случае спасибо! :) - person cnovrup; 23.04.2019