当前位置:  首页>> 技术小册>> Python与办公-玩转PDF

每一个PDF页面都有自己的尺寸,在pypdf2中,PageObject对象的mediabox属性存储的是就是该页面的尺寸信息,对应的是一个RectangleObject对象。RectangleObject对象的left、bottom、right、top四个属性分别代表左、下、右、上四边的距离,我们可以把一个PDF页面的左下角当成是坐标原点,而RectangleObject的四个属性分别是四条边到达坐标轴的距离。

我还是举一个例子看一下吧:

  1. from PyPDF2 import PdfReader
  2. reader = PdfReader"./pdf_ files/练习文档.pdf"
  3. page = reader.getPage(0)
  4. print(page.mediabox) # 输出:RectangleObject([0,0,612,792])
  5. print(page.mediabox.left) # 输出:0
  6. print(page.mediabox.bottom) # 输出:0
  7. print(page.mediabox.right) # 输出:612
  8. print(page.mediabox.top) # 输出:792

代码中读取了“练习文档.pdf”的第一页的mediabox属性,该文档是信纸的尺寸,约等于612磅×792磅,我们把它放到坐标图里看一下,如图9-2所示。

现在通过坐标图我们可以更容易理解RectangleObject左、下、右、上四个属性所表示的含义了,所以修改这几个属性实际上就是修改页面的尺寸。

比如说我们要把信纸的尺寸修改为A4纸的尺寸,只要把PageObject对象的mediabox 重新赋值为一个指定四边距离的RectangleObject对象即可,注意这四边距离是一个元组,代码如下:

  1. from PyPDF2 import PdfReader,PdfWriter
  2. from PyPDF2.generic import RectangleObject
  3. reader = PdfReader"./pdf_ files/练习文档.pdf"
  4. writer = PdfWriter()
  5. for page in reader.pages:
  6. page.mediabox = RectangleObject((0,0,595.28,841.89))
  7. writer.addPage(page)
  8. with open("./pdf_ files/test.pdf","wb") as f:
  9. writer.write(f)

如果不想自己实例化RectangleObject对象也是可以的,PageObject对象有提供一些缩放方法,比如说scaleTo()方法可以直接指定宽高,代码如下:

  1. from PyPDF2 import PdfReader,PdfWriter
  2. reader = PdfReader"./pdf_ files/练习文档.pdf"
  3. writer = PdfWriter()
  4. for page in reader.pages:
  5. page.scaleTo(595.28,841.89)
  6. writer.addPage(page)
  7. with open("./pdf_ files/test.pdf","wb") as f:
  8. writer.write(f)

PageObject对象的scaleBy()方法可以按某个比例因子对页面进行等比缩放,比例因子就是指缩放的倍数,比如说把所有页面的宽高都缩小为原来的50%,代码如下:

  1. from PyPDF2 import PdfReader,PdfWriter
  2. reader = PdfReader"./pdf_ files/练习文档.pdf"
  3. writer = PdfWriter()
  4. for page in reader.pages:
  5. page.scaleBy(0.5)
  6. writer.addPage(page)
  7. with open("./pdf_ files/test.pdf","wb") as f:
  8. writer.write(f)