Обертати PDF-сторінки: 90 градусів для парних сторінок та -90 градусів для непарних сторінок


27

Мені було цікаво в pdf-файлі, як обертати сторінки PDF: 90 градусів для парних сторінок і -90 градусів для непарних сторінок?

За pdftk, все, що я знаю, - це обертати сторінку pdftk in.pdf cat 1W output out.pdfта обертати всі сторінки pdftk in.pdf cat 1-endW output out.pdf.

Спасибі!


FYI: для нових версій pdftk синтаксис є:, pdftk in.pdf cat 1-endwest output out.pdfтобто westзамість Wабо southзамість S...
colidyre

Відповіді:


11

Це легко, оскільки pdftk 1.44 додав shuffleоперацію, що дозволяє різні перетворення на непарних і парних сторінках (серед інших цілей).

Якщо у вас є старша версія pdftk, ви можете використовувати цей скрипт Python з бібліотекою PyPdf . (Попередження, набране безпосередньо у веб-переглядачі.)

#!/usr/bin/env python
import sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in range(0,input.getNumPages()):
    output.addPage(input.getPage(i).rotateClockwise(90 if i%2==0 else -90))
output.write(sys.stdout)

30

У pdftkверсії 1.45 (6 грудня 2012 року) або пізнішої версії використовуйте:

pdftk A=MyPdfFile.pdf shuffle AoddWest AevenEast output MyRotatedFile.pdf

Якщо у вас pdftkверсія 1,44 ( спасибі Жиль за вказівку на це! ), Ви можете використовувати:

pdftk A=MyPdfFile.pdf shuffle AoddL AevenR output MyRotatedFile.pdf

Деякі подібні приклади описані в man pdftk(принаймні, в останніх версіях).


1

Як покращення відповіді Жиля :

#!/usr/bin/env python
import sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(open(sys.argv[1], "rb"))
output = PdfFileWriter()
for i in range(0,input.getNumPages()):
    output.addPage(input.getPage(i).rotateClockwise(90 if i%2==0 else -90))
output.write(open(sys.argv[2], "wb"))

Якщо програма приймає аргументи командного рядка вхідного та вихідного файлу: python script.py <inputFileName> <outputFileName>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.