如何使用PyPDF2获得Pdf取向

我正在使用Python / Django。PyPDF2阅读我当前的pdf。

我想阅读已保存的pdf,并获取pdf中单个页面的方向。我希望能够确定页面是横向还是纵向。

tempoutpdffilelocation =  settings.TEMPLATES_ROOT + nameOfFinalPdf
pageOrientation = pageToEdit.mediaBox
pdfOrientation = PdfFileReader(file(temppdffilelocation, "rb"))
# tempPdfOrientationPage = pdfOrientation.getPage(numberOfPageToEdit).mediaBox
print("existing pdf width: ")
# print(existing_pdf.getPage(numberOfPageToEdit).getWidth)
# print("get page size with rotation")
# print(tempPdfOrientationPage.getPageSizeWithRotation) 

existing_pdf = pdfOrientation.getPage(numberOfPageToEdit).mediaBox
# print(pageOrientation)
if pageOrientation.getUpperRight_x() - pageOrientation.getUpperLeft_x() > pageOrientation.getUpperRight_y() - pageOrientation.getLowerRight_y():
  print('Landscape')
  print(pageOrientation)
  # print(pdfOrientation.getWidth())
else:
  print('Portrait')
  print(pageOrientation)
  # print(pdfOrientation.getWidth())
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)

最后一行设置pagesize =字母,我要根据当前pdf确定要确定的内容。这是我的进口商品:

from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter, landscape
import urllib

我已经尝试了pyPdf .mediaBox,但总是返回与预期文件大小相同的值,而不是实际大小。并且pyPdf已过时。如您所见,我还尝试了getWidth和withRotation。我认为PyPDF2 PdfFileReader有一种简单的方法来确定所选对象的方向。任何帮助表示赞赏。谢谢。

3
投票

我仅使用页面的“ /Rotate”属性:

OrientationDegrees = pdf.getPage(numberOfPageToEdit).get('/Rotate')

可以是0, 90, 180, 270None

1
投票

此作品,经过充分测试:

import PyPDF2
from PyPDF2  import PdfFileReader

pdf = PdfFileReader(open('YourPDFname.pdf', 'rb'))
page = pdf.getPage(0).mediaBox

if page.getUpperRight_x() - page.getUpperLeft_x() > page.getUpperRight_y() - 
page.getLowerRight_y():
    print('Landscape')
else:
    print('Portrait')
0
投票

您可以使用以下代码段进行检测:

from PyPDF2  import PdfFileReader

pdf = PdfFileReader(file('example.pdf'))
page = pdf.getPage(0).mediaBox
if page.getUpperRight_x() - page.getUpperLeft_x() > page.getUpperRight_y() - 
page.getLowerRight_y():
    print('Landscape')
else:
    print('Portrait')
0
投票

rotate属性将覆盖mediaBox设置。为此,请在做出最终判断之前检查页面旋转情况。请注意,文本也可以旋转。

from PyPDF2 import PdfFileReader

pdf_path = 'yourPDFname.pdf'
pdf_reader = PdfFileReader(pdf_path)
deg = pdf_reader.getPage(0).get('/Rotate')    
page = pdf_reader.getPage(0).mediaBox
if page.getUpperRight_x() - page.getUpperLeft_x() > page.getUpperRight_y() -page.getLowerRight_y():
    if deg in [0,180,None]:
        print('Landscape')
    else:
        print('Portrait')
else:
    if deg in [0,180,None]:
        print('Portrait')
    else:
        print('Landscape')