代码之家  ›  专栏  ›  技术社区  ›  Jared Farrish

通过旋转和平移将两个PDF文件合并到一个页面中

  •  0
  • Jared Farrish  · 技术社区  · 5 年前

    我有两个PDF,我需要合并成一个单一的,1宽2高的尺寸。如果你听说过一个帐篷卡,这是生产一个帐篷卡PDF。

    -  -  -  -  -
    |           |
    |           |
    |           |   < Upside-down "back"
    |           |
    |           |
    -  -  -  -  -   < Imaginary line
    |           |
    |           |
    |           |   < Right-side up "front
    |           |
    |           |
    -  -  -  - -
    

    translated_page 外场。

    #!/usr/bin/python3
    
    import PyPDF2
    
    from PyPDF2.pdf import PageObject
    
    front_reader = PyPDF2.PdfFileReader(open('front.pdf', 'rb'))
    front = front_reader.getPage(0)
    
    back_reader = PyPDF2.PdfFileReader(open('back.pdf', 'rb'))
    back = back_reader.getPage(0)
    
    tent_height = front.mediaBox.getHeight() + back.mediaBox.getHeight()
    
    translated_page = PageObject.createBlankPage(None, back.mediaBox.getWidth(), tent_height)
    # translated_page.mergeScaledTranslatedPage(back, 1, 0, front.mediaBox.getHeight())
    # translated_page.mergeRotatedTranslatedPage(back, 180, 0, 0)
    translated_page.mergeRotatedPage(back, 180)
    translated_page.mergePage(front)
    
    writer = PyPDF2.PdfFileWriter()
    writer.addPage(translated_page)
    
    with open('out.pdf', 'wb') as outfile:
        writer.write(outfile)
    

    这是上面提到的文件。我错过了什么?

    http://jf.dialogs.com/pdf-rotate-pypdf2.zip

    0 回复  |  直到 5 年前
        1
  •  0
  •   Jared Farrish    5 年前

    解决方案涉及到我正在应用的转换矩阵;基本上,我正在将它转换掉 0, 0

    -x,  y | x,  y
    ---------------
    -x, -y | x, -y
    

    下面的步骤解决了这个问题。

    #!/usr/bin/python3
    
    import PyPDF2
    
    from PyPDF2.pdf import PageObject
    
    front_reader = PyPDF2.PdfFileReader(open('front2.pdf', 'rb'))
    front = front_reader.getPage(0)
    
    back_reader = PyPDF2.PdfFileReader(open('back2.pdf', 'rb'))
    back = back_reader.getPage(0)
    
    tent_width = front.mediaBox.getWidth()
    tent_height = front.mediaBox.getHeight() + back.mediaBox.getHeight()
    tent_rotate_offset = front.mediaBox.getHeight()
    
    translated_page = PageObject.createBlankPage(None, tent_width, tent_height)
    translated_page.mergeRotatedTranslatedPage(back, 180, tent_width / 2, tent_rotate_offset)
    translated_page.mergePage(front)
    
    writer = PyPDF2.PdfFileWriter()
    writer.addPage(translated_page)
    
    with open('out.pdf', 'wb') as outfile:
        writer.write(outfile)
    

    我不知道为什么它有一半的宽度。这将把x原点放在4.25”的变换之前,这表明旋转本身是以x为中心的 front