Как с помощью python вставить страничку из одного PDF в другой

Рейтинг: 2Ответов: 2Опубликовано: 23.01.2023

Есть код, который в конец файла 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'

Ответы

▲ 1Принят

Я не знаю, которую именно страницу вы хотели взять из файла 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)

Объяснение:

  1. Ваша первая попытка:

    original_pdf.insert_page(second_page_copy, 1) не помогло
    

    Метод .insert_page() не для того, что вы хотите (он вставит новую страницу с текстом, который вы задаете как параметр).

     

  2. Ваша вторая попытка — правильный метод, неправильные параметры:

    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 т.к. вы хотели вставить ее пятой по номеру.)

▲ 1

Я не могу читать на вашем языке, но из сообщения об ошибке я могу сказать, что этот метод .insert_pdf(src, ...) требует, чтобы "src" был **PDF-документом**, а не именем файла!