Как объединить две страницы PDF с альбомной ориентацией, используя pyPdf - PullRequest
5 голосов
/ 18 мая 2011

У меня проблемы с объединением двух файлов PDF с pyPdf.Когда я запускаю следующий код, водяной знак (страница 1) выглядит нормально, но страница 2 повернута на 90 градусов по часовой стрелке.

Есть идеи, что происходит?1007 *

Ответы [ 5 ]

5 голосов
/ 30 июня 2013

Вы можете преобразовать страницу во время ее объединения в другую страницу. Я определил эту функцию, чтобы вращать страницу вокруг точки при объединении:

def mergeRotateAroundPointPage(page, page2, rotation, tx, ty):
    translation = [[1, 0, 0],
                   [0, 1, 0],
                   [-tx,-ty,1]]
    rotation = math.radians(rotation)
    rotating = [[math.cos(rotation), math.sin(rotation),0],
                [-math.sin(rotation),math.cos(rotation), 0],
                [0,                  0,                  1]]
    rtranslation = [[1, 0, 0],
                   [0, 1, 0],
                   [tx,ty,1]]
    ctm = utils.matrixMultiply(translation, rotating)
    ctm = utils.matrixMultiply(ctm, rtranslation)

    return page.mergeTransformedPage(page2, [ctm[0][0], ctm[0][1],
                                             ctm[1][0], ctm[1][1],
                                             ctm[2][0], ctm[2][1]])

Тогда вы называете это так:

mergeRotateAroundPointPage(page1, page2, 
                page1.get('/Rotate') or 0, 
                page2.mediaBox.getWidth()/2, page2.mediaBox.getWidth()/2)
2 голосов
/ 19 мая 2011

Я нашел решение.Мой код был в порядке - мне просто нужно было изменить способ создания оригинальных файлов PDF.

Вместо создания PDF с помощью PdfCreator & Photoshop, я скопировал и вставил свое изображение в Photoshop в MS Word 2007 и затем использовалфункция экспорта для создания PDF-файла для page1.Теперь он отлично работает!

Итак, PdfCreator должен создавать PDF-файлы, несовместимые с pyPdf.

0 голосов
/ 31 марта 2013

Я хотел бы добавить, что я использовал Photoshop для сохранения PDF, но как версия 1.4 совместимая. Это сделало огромный файл PDF, но это сработало.

То есть pyPDF неправильно читает.

0 голосов
/ 25 ноября 2011

Так как вы используете pyPdf, это должно помочь при вращении страниц:

output.addPage(input1.getPage(1).rotateClockwise(90))
0 голосов
/ 18 мая 2011

Вы можете использовать функцию rotateClockwise или rotataeCounterClockwise в объекте страницы.

page2 = input2.getPage(0).rotateCounterClockwise(90)
...