Как с помощью python вставить страничку из одного PDF в другой
Есть код, который в конец файла test.pdf вставляет страничку из файла last.pdf
import fitz
original_pdf_path = "test.pdf"
extra_page_path = "last.pdf"
output_file_path = "example-extended.pdf"
original_pdf = fitz.open(original_pdf_path)
extra_page = fitz.open(extra_page_path)
original_pdf.insert_pdf(extra_page, to_page=0)
original_pdf.save(output_file_path)
Все прекрасно работает, но теперь мне нужно из файла five.pdf взять страничку и вставить ее пятой по номеру в файл test.pdf
original_pdf.insert_page(second_page_copy, 1) не помогло
original_pdf.insert_pdf(five_page_path, to_page=0, start_at=1)
выдает ошибку
Traceback (most recent call last): File "/Users/iriska/Projects/test/stati/pdf.py", line 14, in <module> original_pdf.insert_pdf(extra_page_path, to_page=0, start_at=1) File "/Users/iriska/Projects/test/stati/venv/lib/python3.11/site- packages/fitz/fitz.py", line 4589, in insert_pdf if self._graft_id == docsrc._graft_id: ^^^^^^^^^^^^^^^^ AttributeError: 'str' object has no attribute '_graft_id'
Ответы (2 шт):
Я не могу читать на вашем языке, но из сообщения об ошибке я могу сказать, что этот метод .insert_pdf(src, ...) требует, чтобы "src" был **PDF-документом**, а не именем файла!
Я не знаю, которую именно страницу вы хотели взять из файла five.pdf, потому пусть ее номер в переменной n (для первой примените n=0, для второй n=1, и т.д.).
Сделайте так:
n = 1 # вторая страница (например) из файла `five.pdf`
five_page_doc = fitz.open(five_page_path)
original_pdf.insert_pdf(five_page_doc, from_page=n, to_page=n, start_at=4)
Объяснение:
Ваша первая попытка:
original_pdf.insert_page(second_page_copy, 1) не помоглоМетод
.insert_page()не для того, что вы хотите (он вставит новую страницу с текстом, который вы задаете как параметр).Ваша вторая попытка — правильный метод, неправильные параметры:
original_pdf.insert_pdf(five_page_path, to_page=0, start_at=1) выдает ошибкуЯ предполагаю, что ваш первый аргумент
five_page_pathне документ, а только путь к нему (т.е. строка). Надо сначала документ открытьfive_page_doc = fitz.open(five_page_path)а только зятем применить его как первый аргумент метода
.insert_pdf():original_pdf.insert_pdf(five_page_doc, from_page=n, to_page=n, start_at=4) ^^^^^^^^^^^^^ открытый документ(Я исправил значение параметра
start_atт.к. вы хотели вставить ее пятой по номеру.)