PyPDF2: новый форк pyPdf (Перевод)

Сегодня узнал, проект pyPDF НЕ умер, как я думал раньше. На самом деле он перешёл в PyPDF2 (видите небольшую разницу в написании?). Есть так же вероятность того, что кто-то занимается и оригинальной версией проекта. При желании, за судьбой PyPDF2 можно следить на reddit. Тем временем я решил посмотреть, чем же PyPDF2 отличается от оригинала. Так что если у Вас есть пара свободных минут — милости просим.

Введение в PyPDF2

Два года назад я уже  писал про pyPDF, а совсем недавно мне как раз пришлось погрузиться в различные библиотеки для работы с PDF на Python, так что появление нового форка пришлось кстати. Мы возьмём несколько моих старых примеров, запустим их в PyPDF2 и посмотрим, как они сработают.
# Соединяем два PDF
from PyPDF2 import PdfFileReader, PdfFileWriter
 
output = PdfFileWriter
()
pdfOne = PdfFileReader
(open( "somepathtoaPDf", "rb"))
pdfTwo = PdfFileReader
(open("someotherpathtoaPDf", "rb"))
 
output.
addPage(pdfOne.getPage(0))
output.
addPage(pdfTwo.getPage(0))
 
outputStream =
open(r"output.pdf", "wb")
output.
write(outputStream)
outputStream.
close()
На моём Windows 7 это сработало без проблем. Как Вы можете предположить, всё, что этот код делает — создаёт два объекта PdfFileReader и прочитывает в каждом первую страницу. После этого, он добавляет эти две страницы в наш PdfFileWriter. И, наконец, мы открываем новый файл и записываем в него PDF. Вот и всё! Мы только что создали новый документ из двух разных PDF!
Теперь давайте попробуем скрипт для поворота страницы из другой моей страницы:
from PyPDF2 import PdfFileWriter, PdfFileReader
 
output = PdfFileWriter()
input1 = PdfFileReader(file("document1.pdf", "rb"))
output.addPage(input1.getPage(1).rotateClockwise(90))
# output.addPage(input1.getPage(2).rotateCounterClockwise(90))
 
outputStream = file("output.pdf", "wb")
output.write(outputStream)
outputStream.close()
Этот скрипт так же сработал на моей машине. Очень даже хорошо. Мой последний тест на соответствие должен проверить, можем ли мы вытаскивать данные так же, как мог оригинальный pyPdf. Давайте попробуем прочитать метаданные:
>>> from PyPDF2 import PdfFileReader
 
>>> p = r'C:UsersmdriscollDocumentsreportlab-userguide.pdf'
 
>>> pdf = PdfFileReader(open(p, 'rb'))
 
>>> pdf.documentInfo
 
{'/ModDate': u'D:20120629155504', '/CreationDate': u'D:20120629155504', '/Producer': u'GPL Ghostscript 8.15', '/Title': u'reportlab-userguide.pdf', '/Creator': u'Adobe Acrobat 10.1.3', '/Author': u'mdriscoll'}
>>> pdf.getNumPages()
 
120
>>> info = pdf.getDocumentInfo()
 
>>> info.author
 
u'mdriscoll'
>>> info.creator
 
u'Adobe Acrobat 10.1.3'
>>> info.producer
 
u'GPL Ghostscript 8.15'
>>> info.title
 
u'reportlab-userguide.pdf'
Тоже очень хорошо, кроме поля автора. Я определённо не автор этого документа и я не знаю, почему PyPDF2  решил, что я им являюсь. Всё остальное сработало верно. Теперь давайте посмотрим, что тут нового.

Что нового в PyPDF2

Одна из вещей, которую я сразу заметил как только взглянул на исходники PyPDF2, это то, что он добавляет несколько новых методов в PdfFileReader и PdfFileWriter. Кроме того, я заметил, что появился совершенно новый модуль merger.py, который содержит класс PdfFileMerger. Поскольку никакой нормальной документации нет — придётся лезть «под капот». Единственный новый метод, который был добавлен в reader — это getOutlines, который позволяет получить эскизы документа (outlines), если они есть. В writer появилась возможность добавить bookmarks и named destinations. Не так уж и много, но дарёному коню в зубы не смотрят. Но больше всего меня вдохновил новый класс PdfFileMerger, который мне напомнил почти погибший проект Stapler. PdfFileMerger позволяет нам объединить несколько PDF в один, используя соединение, вставку и вырезку и их комбинации.
Давайте попробуем?
import PyPDF2
 
path = open('path/to/hello.pdf', 'rb')
path2 = open('path/to/another.pdf', 'rb')
 
merger = PyPDF2.PdfFileMerger()
 
merger.merge(position=0, fileobj=path2)
merger.merge(position=2, fileobj=path)
merger.write(open("test_out.pdf", 'wb'))
Тут мы соединяем два файла вместе. В первый файл вместо третьей страницы будет добавлен второй файл, а как только содержание второго файла закончится будет продолжен первый файл. Это проще, чем проходиться по страницам двух документов и соединять их. Команда merge имеет следующую сигнатуру и строку документации, которая хорошо всё это описывает:
>>> merge(position, file, bookmark=None, pages=None, import_bookmarks=True)
 
Сливает страницы из исходного документа, определённого в
"file" в файл вывода на место, определённое в "position".
 
Опционально Вы можете определить закладку, которая будет установлена на начало этого файла. Для этого надо передать текст закладки в параметре
"bookmark".
 
Вы можете запретить импорт закладок из исходного документа если передадите значение False параметру
"import_bookmarks".
 
Вы можете так же использовать параметр "pages" для того, чтобы добавить только некоторые страницы исходного файла. Для этого надо задать их диапазон.
Есть так же метод append, который аналогичен команде merge, но вместо того, чтобы сливать файлы, он добавляет их в конец исходного файла. Вот скрипт для примера:
import PyPDF2
 
path = open('path/to/hello.pdf', 'rb')
path2 = open('path/to/another.pdf', 'rb')
 
merger = PyPDF2.PdfFileMerger()
 
merger.append(fileobj=path2)
merger.append(fileobj=path)
merger.write(open("test_out2.pdf", 'wb'))
И совсем не больно!

Подводим итоги

Мне кажется, это хорошая альтернатива для работы с PDF. Я могу комбинировать и разделять PDF при помощи PyPDF2 даже проще, чем с оригинальным pyPdf. Кроме того, я надеюсь, что PyPDF не умрёт, так как у него есть спонсоры, оплачивающие его разработку. Согласно потокам reddit есть даже шанс, что оригинальный pyPdf будет переработан и в конце концов оба эти проекта сольются в дружеском экстазе. Но, вне зависимости от того, чем всё закончится, я рад, что разработка его возобновилась и надеюсь, что она не скоро прекратится.

Домашнее чтение

Автор: Ishayahu Lastov

Вам интересно, кто чаще выздоравливает?

clip_image001

Британский психолог, один из лидеров биологического направления в психологии, автор популярного теста интеллекта доктор Ганс Айзенк еще в 1970-х опубликовал статью, где доказывал, что курение абсолютно невредно для здоровья и не провоцирует развития рака. Читать

Включение поля "Быстрый фильтр" в диспетчере пакетов Synaptic в Debian/Ubuntu и производные

Synaptic — графический интерфейс для системы управления пакетами apt или проекта Debian. Программа совмещает в себе все возможности консольной системы управления пакетами apt и удобство графического интерфейса. С помощью Synaptic вы можете устанавливать, удалять, настраивать и обновлять пакеты в вашей системе, просматривать списки доступных и установленных пакетов, управлять репозиториями и обновлять систему до новой версии.
Читать

Пол-пала — хирург без скальпеля!


Без преувеличения можно сказать:  пол-пала или трава эрвы шерстистой способна заменить целую аптеку. Лечит и подагру, и полиартрит. Как солевыводящее средство применяется при пиелонефрите, мочекаменной болезни, циститах.


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

Отвар пол-палы является сильным мочегонным средством, способствующим растворению почечных камней и выведению их из организма, излечивает хронический гломерулонефрит (воспаление почечных клубочков). Почки очищаются быстро, безболезненно и начинают нормально функционировать.

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

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

Теперь несколько рецептов: 
1. Столовую ложку мелко искрошенной травы залить одним стаканом кипятка и 15 минут нагревать на водяной бане. В ней остудить до тёплого состояния, процедить и отжать. Отвар пить тёплым по полстакана за полчаса до еды через трубочку, чтобы не повредить эмаль зубов.
2. Можно приготовить настой в термосе. Одну столовую ложку пол-палы залить 250 граммами крутого кипятка и настоять один час. Пить по трети стакана тёплым 2-3 раза в сутки. Курс лечения — 10-30 дней. 
Оставшуюся после отвара траву можно использовать для наружного лечения фурункулов, угревой сыпи, трофических язв. 

Исключить острое, солёное, алкоголь. 

На курс необходимо 60 грамм травы. Перерыв между курсами полгода. При запущенной болезни пить отвар через 3 часа и в этом случае нужно 100 грамм травы и 3 курса. 
Пол-пала выводит из организма вредные вещества, очищает его. Вот рецепт клизм с отваром чудо-травы: стакан отвара травы на 2 литрами тёплой воды. Делать клизмы утром и вечером 3 раза в неделю, затем недельный перерыв. И так 3 раза. 

После тёплой клизмы сделать сразу холодную — 20 градусов. Сразу на печень положить тёплую грелку. Для отваров желательно использовать талую, родниковую или дистиллированную воду. 
Противопоказаний у травы нет, но лучше посоветоваться с врачом. Он определит необходимость её применения и дозировку. Будьте здоровы!

Автор: Культура Процветания

Житель США снял на видео «замерзший» океан

Американец Райан Кэнти, проживающий в штате Массачусетс, снял на камеру частично замерзший океан. Запись была опубликована на Youtube-канале жителя США.

«Кто хочет поплавать?», — шутит в комментарии к ролику автор видео. Кэнти пояснил, что на момент съемки на побережье океана температура воздуха опустилась до минус 20 градусов. И это при том, что в этом районе температура зимой в среднем держится на отметке в минус 8 градусов. Читать