from PyPDF2 import PdfWriter, PdfReader
reader = PdfReader("example.pdf")
writer = PdfWriter()
# add page 1 from reader to output document, unchanged:
writer.add_page(reader.pages[0])
# add page 2 from reader, but rotated clockwise 90 degrees:
writer.add_page(reader.pages[1].rotate(90))
# add page 3 from reader, but crop it to half size:
page3 = reader.pages[2]
page3.mediabox.upper_right = (
page3.mediabox.right / 2,
page3.mediabox.top / 2,
)
writer.add_page(page3)
# add some Javascript to launch the print window on opening this PDF.
# the password dialog may prevent the print dialog from being shown,
# comment the the encription lines, if that's the case, to try this out:
writer.add_js("this.print({bUI:true,bSilent:false,bShrinkToFit:true});")
# write to document-output.pdf
with open("PyPDF2-output.pdf", "wb") as fp:
writer.write(fp)
頁(yè)面旋轉(zhuǎn)
最典型的旋轉(zhuǎn)是將頁(yè)面順時(shí)針旋轉(zhuǎn) 90 度的倍數(shù)。這是在頁(yè)面方向錯(cuò)誤時(shí)完成的。您可以使用 PageObject 類的旋轉(zhuǎn)方法來(lái)做到這一點(diǎn):
from PyPDF2 import PdfWriter, PdfReader
reader = PdfReader("input.pdf")
writer = PdfWriter()
writer.add_page(reader.pages[0])
writer.pages[0].rotate(90)
with open("output.pdf", "wb") as fp:
writer.write(fp)
rotate 方法通常優(yōu)于 ?page.add_transformation(Transformation().rotate())
? 方法,因?yàn)??rotate
? 將確保頁(yè)面仍在 mediabox / cropbox 中。 transformation 對(duì)象對(duì)頁(yè)面內(nèi)容的坐標(biāo)進(jìn)行操作,并且不會(huì)更改 mediabox 或 cropbox。
普通合并
from PyPDF2 import PdfReader, PdfWriter, Transformation
# Get the data
reader_base = PdfReader("labeled-edges-center-image.pdf")
page_base = reader_base.pages[0]
reader = PdfReader("box.pdf")
page_box = reader.pages[0]
page_base.merge_page(page_box)
# Write the result back
writer = PdfWriter()
writer.add_page(page_base)
with open("merged-foo.pdf", "wb") as fp:
writer.write(fp)
與旋轉(zhuǎn)合并
from PyPDF2 import PdfReader, PdfWriter, Transformation
# Get the data
reader_base = PdfReader("labeled-edges-center-image.pdf")
page_base = reader_base.pages[0]
reader = PdfReader("box.pdf")
page_box = reader.pages[0]
# Apply the transformation
transformation = Transformation().rotate(45)
page_box.add_transformation(transformation)
page_base.merge_page(page_box)
# Write the result back
writer = PdfWriter()
writer.add_page(page_base)
with open("merged-foo.pdf", "wb") as fp:
writer.write(fp)
如果添加擴(kuò)展參數(shù):
transformation = Transformation().rotate(45)
page_box.add_transformation(transformation)
page_base.merge_page(page_box)
你將得到:
或者,您可以將合并后的圖像向右移動(dòng)一點(diǎn),方法是使用
op = Transformation().rotate(45).translate(tx=50)
縮放
PyPDF2 提供了兩種縮放方式:頁(yè)面本身和頁(yè)面上的內(nèi)容。通常,您希望將兩者結(jié)合起來(lái)。
縮放頁(yè)面(畫(huà)布)
from PyPDF2 import PdfReader, PdfWriter
# Read the input
reader = PdfReader("resources/side-by-side-subfig.pdf")
page = reader.pages[0]
# Scale
page.scale_by(0.5)
# Write the result to a file
writer = PdfWriter()
writer.add_page(page)
writer.write("out.pdf")
如果你希望有更多的控制,你可以直接調(diào)整各種頁(yè)面框:
from PyPDF2.generic import RectangleObject
mb = page.mediabox
page.mediabox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
page.cropbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
page.trimbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
page.bleedbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
page.artbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
縮放內(nèi)容
內(nèi)容被縮放到坐標(biāo)系的原點(diǎn)。通常,這是左下角。
from PyPDF2 import PdfReader, PdfWriter, Transformation
# Read the input
reader = PdfReader("resources/side-by-side-subfig.pdf")
page = reader.pages[0]
# Scale
op = Transformation().scale(sx=0.7, sy=0.7)
page.add_transformation(op)
# Write the result to a file
writer = PdfWriter()
writer.add_page(page)
writer.write("out-pg-transform.pdf")
更多建議: