Intereting Posts
Захват определенного столбца из вывода команды Использует ли lvm-тонкое использование dm-thin под ними или они являются отдельными утилитами? cyrus impad и рекурсивные каталоги INBOX Работа с экраном через другой сеанс экрана Как сделать мой диск отключенным в ожидании нечитаемых секторов sftp от Unix-сервера до окна Есть ли способ найти файлы, содержащие только непечатаемые символы? Ошибка при установке Debian 7 на виртуальной машине (Ошибка при попытке запуска: chroot / target mount -t proc proc / proc) Верните только строку с совпадением в sed Невозможно использовать «userpace» cpufreq-регулятор и установить частоту процессора Как включить cups-lpd / port 515? Копировать поверх ssh и выполнять команды за один сеанс Как заставить udisksctl действовать для другого пользователя? Случайно выполненный sudo rm / * на удаленном сервере Монтируемый дедуплицирующий контейнер

Как я «unbook» pdf

У меня есть файл в формате pdf, который был составлен в формате буклета. Он предназначен для печати на бумаге формата А4 в альбомной ориентации; вот две страницы в pdf, которые должны соответствовать четырем страницам в реальной книге.

------------------------------- | | | | | | | | | | (1) | (3) | | | | | | | | | | ------------------------------- ------------------------------- | | | | | | | | | | (4) | (2) | | | | | | | | | | ------------------------------- 

Номера в квадратных скобках соответствуют порядку отдельных страниц.

Я знаю, что на linux есть всевозможные команды (pdfbook, pdfnup и т. Д.) (Что, вероятно, было использовано для создания этой брошюры в первую очередь). Как мне «unbook» это — то есть, я хотел бы сделать PDF-документ из этого, где каждая отдельная страница конечного продукта является отдельной страницей pdf, упорядоченной обычным способом.

редактировать

Благодаря Gilles мне удалось использовать следующий код:

 import copy, sys from pyPdf import PdfFileWriter, PdfFileReader input = PdfFileReader(sys.stdin) output = PdfFileWriter() second_half = [] for i in range(0,input.getNumPages()): p = input.getPage(i) q = copy.copy(p) print >> sys.stderr, 'splitting page',i print >> sys.stderr, '\tlowerLeft:',p.mediaBox.lowerLeft print >> sys.stderr, '\tupperRight:',p.mediaBox.upperRight p.mediaBox.upperRight = (ur[0], (bl[1]+ur[1])/2) p.mediaBox.lowerLeft = bl q.mediaBox.upperRight = ur q.mediaBox.lowerLeft = (bl[0], (bl[1]+ur[1])/2) if i % 2 == 0: output.addPage(p) qold = q else: output.addPage(q) output.addPage(qold) output.addPage(p) output.write(sys.stdout) 

Вот небольшой скрипт Python с использованием библиотеки PyPdf, которая выполняет эту работу. (Производится из un2up .) Сохраните его в скрипте unbook , сделайте его исполняемым ( chmod +x unbook ) и запустите его как фильтр ( unbook <book.pdf >1up.pdf ).

Я тестировал этот скрипт на выходе pdfbook --signature=N Для другого метода вам может не потребоваться отменить любую другую страницу ввода, и порядок страниц может отличаться (это зависит от ориентации ландшафтных страниц). Расположение страницы не соответствует вашему вопросу; 13,42 не имеет для меня смысла (в 4-страничной книге 3 должно быть рядом с 2, а не рядом с 1).

 #!/usr/bin/env python import copy, sys from pyPdf import PdfFileWriter, PdfFileReader input = PdfFileReader(sys.stdin) output = PdfFileWriter() second_half = [] for i in range(0,input.getNumPages()): p = input.getPage(i) q = copy.copy(p) (w, h) = p.mediaBox.upperRight p.mediaBox.upperRight = (w/2, h) q.mediaBox.upperLeft = (w/2, h) if i % 2 == 0: p.rotateClockwise(180) q.rotateClockwise(180) output.addPage(p) second_half.append(q) else: output.addPage(p) second_half.append(q) second_half.reverse() for q in second_half: output.addPage(q) output.write(sys.stdout) 

Игнорировать любое предупреждение об отказе; только сторонники PyPdf нуждаются в этом.