Поворот страниц 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.

Благодарность!


К вашему сведению: для более новых версий 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 ( спасибо Gilles за указание на это! ), Вы можете использовать:

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.