Рубрики
Без рубрики

Работа с PDF-файлами в Python: Вставка, Удаление и изменение порядка страниц

Автор оригинала: Frank Hofmann.

Эта статья является третьей в серии работ по работе с PDF файлами на Python:

Вступление

Эта статья является третьей частью небольшой серии статей о работе с PDF-файлами в Python. В предыдущих статьях мы познакомились с чтением PDF-документов с помощью Python. До сих пор вы научились манипулировать существующими PDF – файлами, а также читать и извлекать содержимое-как текст, так и изображения. Кроме того, мы обсуждали разделение документов на отдельные страницы, а также добавление водяных знаков и штрих-кодов.

Теперь в этой статье мы сделаем еще один шаг вперед и продемонстрируем, как переставить PDF-документ несколькими различными способами.

  • Удаление страниц с помощью pdfrw
  • Удаление страниц с помощью PyMuPDF
  • Вставка страниц с помощью PyMuPDF
  • Разделение четных и нечетных страниц с помощью PyPDF2

Удаление страниц с помощью pdfrw

Удаление отдельных страниц из PDF-файла так же просто, как и следующее:

  • Чтение PDF-файла в качестве входного файла
  • Запись выбранных страниц в новый PDF – файл в качестве выходного файла

В следующем примере из PDF-документа удаляются первые две страницы. Используя библиотеку pdfrw , файл сначала считывается с помощью класса PdfReader () . За исключением первой и второй страниц, каждая страница добавляется в выходной файл с помощью метода add page () , а затем записывается на диск.

На рис. 1 показаны выходные данные при выполнении кода в четырехстраничном PDF-файле.

# !/usr/bin/python
# Remove the first two pages (cover sheet) from the PDF

from pdfrw import PdfReader, PdfWriter

input_file = "example.pdf"
output_file = "example-updated.pdf"

# Define the reader and writer objects
reader_input = PdfReader(input_file)
writer_output = PdfWriter()

# Go through the pages one after the next
for current_page in range(len(reader_input.pages)):
    if current_page > 1:
        writer_output.addpage(reader_input.pages[current_page])
        print("adding page %i" % (current_page + 1))

# Write the modified content to disk
writer_output.write(output_file)
Удалите первые две страницы из PDF - файла

Удаление страниц с помощью PyMuPDF

Библиотека PyMuPDF содержит довольно много сложных методов, которые упрощают удаление страниц из PDF-файла. Он позволяет указать либо одну страницу (с помощью метода deletePage () ), либо диапазон номеров страниц (с помощью метода deletePageRange () ), либо список с номерами страниц (с помощью метода select () ).

В следующем примере будет показано, как использовать список для выбора страниц, которые следует сохранить из исходного документа. Имейте в виду, что страницы, которые не указаны, не будут частью выходного документа. В нашем случае выходной документ содержит только первую, вторую и четвертую страницы.

# !/usr/bin/python

# Recall that PyMuPDF is imported as fitz
import fitz

input_file = "example.pdf"
output_file = "example-rearranged.pdf"

# Define the pages to keep - 1, 2 and 4
file_handle = fitz.open(input_file)
pages_list = [0,1,3]

# Select the pages and save the output
file_handle.select(pages_list)
file_handle.save(output_file)

Вставка страниц с помощью PyMuPDF

Библиотека PyMuPDF также позволяет вставлять страницы. Он предоставляет методы new Page() для добавления полностью пустых страниц и insert Page() для добавления существующей страницы. В следующем примере показано, как добавить страницу из другого PDF-документа в конце другого.

# !/usr/bin/python

# Recall that PyMuPDF is imported as fitz
import fitz

original_pdf_path = "example.pdf"
extra_page_path = "extra-page.pdf"
output_file_path = "example-extended.pdf"

original_pdf = fitz.open(original_pdf_path)
extra_page = fitz.open(extra_page_path)

original_pdf.insertPDF(extra_page)
original_pdf.save(output_file_path)

Разделение четных и нечетных страниц с помощью PyPDF2

В следующем примере используется PyPDF2 и делается это путем взятия файла, разделения его на четные и нечетные страницы, сохранения четных страниц в файле even.pdf и нечетных страниц в файле odd.pdf .

Этот скрипт Python начинается с определения двух выходных файлов, even.pdf и odd.pdf , а также соответствующих им объектов writer pdf_writer_even и pdf_writer_odd . Затем в цикле for скрипт проходит через весь PDF-файл и читает одну страницу за другой. Страницы с четными номерами страниц добавляются в поток pdf_writer_even с помощью addPage() , а нечетные номера добавляются в поток pdf_writer_odd . В конце концов оба потока сохраняются на диске в отдельных файлах, как было определено ранее.

#!/usr/bin/python3

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_document = "example.pdf"
pdf = PdfFileReader(pdf_document)

# Output files for new PDFs
output_filename_even = "even.pdf"
output_filename_odd = "odd.pdf"

pdf_writer_even = PdfFileWriter()
pdf_writer_odd = PdfFileWriter()

# Get reach page and add it to corresponding
# output file based on page number
for page in range(pdf.getNumPages()):
    current_page = pdf.getPage(page)
    if page % 2 == 0:
        pdf_writer_odd.addPage(current_page)
    else:
        pdf_writer_even.addPage(current_page)

# Write the data to disk
with open(output_filename_even, "wb") as out:
     pdf_writer_even.write(out)
     print("created", output_filename_even)

# Write the data to disk
with open(output_filename_odd, "wb") as out:
     pdf_writer_odd.write(out)
     print("created", output_filename_odd)

Вывод

Переписать и перестроить структуру PDF-файла довольно легко с помощью библиотек pdfrw, PyMuPDF и PyPDF2. С помощью всего лишь нескольких строк кода Python вы можете удалять страницы, разделять их и добавлять новый контент.