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

Эта статья является третьей в серии по работе с PDF-файлами в Python: * Чтение и разделение страниц [/ working-with-pdfs-in-python-add-images-and-watermarks /] * Добавление изображений и водяных знаков [/ working- with-pdfs-in-python-add-images-and-watermarks /] * Вставка, удаление и изменение порядка страниц (вы здесь) Введение Эта статья является третьей частью небольшой серии по работе с PDF-файлами в Python. В предыдущих статьях мы познакомились с чтением PDF-документов с помощью Pyth.

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

Вступление

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

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

Удаление страниц с помощью 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) 

Удалить первые две страницы изPDF{.ezlazyload .img-responsive}

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

comments powered by Disqus