#python #pypdf2
#python #pypdf
Вопрос:
Работаю над простым упражнением, связанным с pyPdf — мне в основном нужно взять PDF-файл и применить к нему водяной знак.
Вот мой код:
# We need to build a program that will watermark all of our PDF files
# Use the wtr.pdf and apply it to all of the pages of our PDF file
import PyPDF2
# Open the file we want to add the watermark to
with open("combined.pdf", mode="rb") as file:
reader = PyPDF2.PdfFileReader(file)
# Open the watermark file and get the watermark
with open("wtr.pdf", mode="rb") as watermark_file:
watermark_reader = PyPDF2.PdfFileReader(watermark_file)
# Create a writer object for the output file
writer = PyPDF2.PdfFileWriter()
for i in range(reader.numPages):
page = reader.getPage(i)
# Merge the watermark page object into our current page
page.mergePage(watermark_reader.getPage(0))
# Append this new page into our writer object
writer.addPage(page)
with open("watermarked.pdf", mode="wb") as output_file:
writer.write(output_file)
Мне неясно, почему я получаю эту ошибку:
$ python watermark.py
Traceback (most recent call last):
File "watermark.py", line 20, in <module>
page.mergePage(watermark_reader.getPage(0))
File "C:Python38libsite-packagesPyPDF2pdf.py", line 2239, in mergePage
self._mergePage(page2)
File "C:Python38libsite-packagesPyPDF2pdf.py", line 2260, in _mergePage
new, newrename = PageObject._mergeResources(originalResources, page2Resources, res)
File "C:Python38libsite-packagesPyPDF2pdf.py", line 2170, in _mergeResources
newRes.update(res1.get(resource, DictionaryObject()).getObject())
AttributeError: 'NullObject' object has no attribute 'get'
Я был бы признателен за любую информацию. Я некоторое время смотрел на это.
Комментарии:
1. Убедитесь, что pdf-файл находится в том же каталоге, что и ваш код.
2. Спасибо за предложение. Они находятся в одном каталоге.
Ответ №1:
По какой-то причине ваш PDF-файл не содержит «/ Resources». PyPDF2 пытается получить его в строке 2314 в https://github.com/mstamy2/PyPDF2/blob/master/PyPDF2/pdf.py#L2314
Вы можете попробовать другой файл pdf, чтобы проверить, сохраняется ли ошибка. Возможно, это ошибка в библиотеке или библиотека не поддерживает такие файлы.
Еще одна вещь, которую я заметил, это то, что номера строк в главной ветке библиотеки не совпадают с номерами строк в вашей трассировке стека, поэтому, возможно, вам нужно получить более свежую версию библиотеки и надеяться, что проблема там устранена.
При кратком просмотре структуры файла pdf кажется, что /Resources являются необязательными. Если это так, то PyPDF2 не обрабатывает этот случай, и, вероятно, об этом следует сообщать как об ошибке в https://github.com/mstamy2/PyPDF2/issues
Комментарии:
1. Обновить. Я попытался обновить до PyPDF3, но получил ту же ошибку. Спасибо за ваше предложение.
2. Похоже, что PyPDF3 — это просто старая ветка PyPDF2 и не является разумной версией для обновления.