Автор оригинала: 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)
Удаление страниц с помощью 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 вы можете удалять страницы, разделять их и добавлять новый контент.