Вставка, удаление и изменение порядка страниц в PDF-файлах на Python
В этой статье мы продемонстрируем, как изменить порядок PDF-документа несколькими способами:
- Удаление страниц с помощью pdfrw.
- Удаление страниц с помощью PyMuPDF.
- Вставка страниц с помощью PyMuPDF.
- Разделение четных и нечетных страниц с помощью PyPDF2.
Удаление страниц с помощью pdfrw
Удалить отдельные страницы из файла PDF очень просто:
- Читать PDF, как входной файл.
- Записать выбранные страницы в новый PDF-файл, как выходной.
В следующем примере из PDF-документа удаляются первые две страницы. При использовании библиотеки pdfrw файл сначала читается с помощью класса PdfReader(). За исключением первой и второй страницы, каждая страница добавляется в выходной файл с помощью метода addpage(), а затем в конечном итоге записывается на диск.
На рисунке 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 также позволяет вставлять страницы. Он предоставляет методы newPage() для добавления полностью пустых страниц и insertPage() для добавления существующей страницы. В следующем примере показано, как добавить страницу из другого документа 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, а также их соответствующих объектов записи 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 вы можете удалять страницы, разделять их и добавлять новый контент.
Автор