如何使用PyPDF2获取Pdf方向

2024-10-01 13:41:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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=letter根据当前pdf确定的内容。
以下是我的进口:

^{pr2}$

我尝试过pyPdf.mediaBox,但它总是返回预期文件大小的相同值,而不是实际大小。pyPdf已经过时了。 如你所见,我也尝试了getWidth和withRotation。
我认为PyPdf2PdfFileReader有一种简单的方法来确定所选对象的方向。

感谢任何帮助。谢谢。在


Tags: pdfwith页面方向printexistingpagesizemediabox
3条回答

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

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

它可以是0, 90, 180, 270或{}

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

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')

这一个有效,经过充分测试:

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')

相关问题 更多 >