5

2つのPDFファイルをpyPdfとマージするのに問題があります。次のコードを実行すると、透かし(page1)は正常に見えますが、page2は時計回りに90度回転しています。

何が起こっているのかアイデアはありますか?

何がうまくいかない例

from pyPdf import PdfFileWriter, PdfFileReader

# PDF1: A4 Landscape page created in photoshop using PdfCreator, 
input1 = PdfFileReader(file("base.pdf", "rb"))
page1 = input1.getPage(0)

# PDF2: A4 Landscape page, text only, created using Pisa (www.xhtml2pdf.com)
input2 = PdfFileReader(file("text.pdf", "rb"))
page2 = input2.getPage(0)

# Merge
page1.mergePage(page2)

# Output
output = PdfFileWriter()
output.addPage(page1)
outputStream = file("output.pdf", "wb")
output.write(outputStream)
outputStream.close()
4

5 に答える 5

5

ページを別のページにマージしているときに、ページを変換できます。マージ中にポイントを中心にページを回転させるために、この関数を定義しました。

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)
于 2013-06-30T17:10:57.603 に答える
2

私は解決策を見つけました。私のコードは問題ありませんでした。元のPDFファイルの生成方法を変更する必要がありました。

PdfCreatorとPhotoshopを使用してPDFを作成する代わりに、フォトショップの画像をコピーしてMS Word 2007に貼り付け、そのエクスポート機能を使用してpage1のPDFファイルを作成しました。今ではうまく機能します!

したがって、PdfCreatorはpyPdfと互換性のないPDFファイルを作成する必要があります。

于 2011-05-19T01:19:49.817 に答える
0

pyPdfを使用しているので、これでページを回転させるためのトリックが実行されます。

output.addPage(input1.getPage(1).rotateClockwise(90))
于 2011-11-24T20:44:00.440 に答える
0

ページオブジェクトでrotateClockwiseまたはrotataeCounterClockwise関数を使用できます。

page2 = input2.getPage(0).rotateCounterClockwise(90)
于 2011-05-18T07:35:40.120 に答える
0

Photoshopを使用してPDFを保存しましたが、バージョン1.4と互換性があることを付け加えたいと思います。これは巨大なPDFファイルを作成しましたが、機能しました。

したがって、pyPDFが正しく読み取られていません。

于 2013-03-30T21:58:39.950 に答える