Это старая версия документа.


Библиотека на чистом Python для работы с PDF. Вот на что способен модуль:

  • извлечение информации из документа (название, автор, …)
  • постраничное разрезание документа,
  • постраничное объединение документа,
  • обрезка страниц,
  • слияние нескольких страниц в одну,
  • шифровка и дешифровка PDF файлов.

Так как все это на чистом Python, то библиотека должны работать под любой платформой Python без всяких зависимостей от внешних библиотек. Модуль может также работать полностью на StringIO объектах охотнее, чем на файловых потоках, разрешая проводить манипуляции с PDF в оперативной памяти, а не на жестком диске. Поэтому это довольно полезная штука для сайтов, которые управляют или оперируют PDF документами.

Пакет pyPDF доступен из официального репозитория: этот замечательный пакет

Документация

Простой пример

example.py
#!/usr/bin/env python
# coding: utf-8
 
from pyPdf import PdfFileWriter, PdfFileReader
 
output = PdfFileWriter()
input1 = PdfFileReader(file("Документ.pdf", "rb"))
 
# выводим на экран заголовок файла document1.pdf
print "Заголовок = %s" % (input1.getDocumentInfo().title)
 
# добавляем в output страницу №1 из inpu1, без изменений
output.addPage(input1.getPage(0))
 
# добавляем в output страницу №2 из inpu1, но перевернутую на 90 градусов
output.addPage(input1.getPage(1).rotateClockwise(90))
 
# добавляем страницу №3 из input1, повернутую другим способом:
output.addPage(input1.getPage(2).rotateCounterClockwise(90))
# или так: output.addPage(input1.getPage(2).rotateClockwise(270))
 
# добавляем страницу №4 из imput1, но сначала добавляем водяной знак из другого pdf:
page4 = input1.getPage(3)
watermark = PdfFileReader(file("ВодянойЗнак.pdf", "rb"))
page4.mergePage(watermark.getPage(0))
 
# добавляем страницу 5 из imput1, но обрезаем ее до половинного размера:
page5 = input1.getPage(4)
page5.mediaBox.upperRight = (
    page5.mediaBox.getUpperRight_x() / 2,
    page5.mediaBox.getUpperRight_y() / 2
)
output.addPage(page5)
 
# посмотрим, сколько страниц содержит imput1:
print "Документ.pdf имеет %s стр." % input1.getNumPages()
 
# Наконец, записываем "output" в файл "Результат.pdf"
outputStream = file("Результат.pdf", "wb")
output.write(outputStream)
outputStream.close()