#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, которые могут предоставить вам структурированную таблицу, например.