Размер страницы PDF через PyPDF2
Есть pdf - файл, который содержит следующие листы формата высота х ширина
A4 297x210 А4 297х210 А2х3 594х1260 А3х4 420х1188 А3 297х420
Я использую скрипт на python и библиотеку PyPDF2, чтобы получить параметры высоты и ширины каждого листа:
with open(path, 'rb') as pdf_file:
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
i = 0
while True:
try:
box = pdf_reader.getPage(i)
width = int(float(box.mediaBox.getWidth())*0.3527)
height = int(float(box.mediaBox.getHeight())*0.3527)
value.append([height, width])
i += 1
except Exception:
break
Получаю следующий вывод:
[297, 210][297, 210][1260, 594][1188, 420][297, 420]
Как видно, только в двух случаях параметры ширины и высоты меняются местами, что для меня критично В чем проблема ? Как это исправить ?
Ответы (1 шт):
Ну вообще, это как говорят программисты - костыль/велосипед, но я сочетал библиотеку fitz (которая делает все как надо) и PyPDF2 (которая, да, не отличает ориентации). У меня стояла похожая задача, но цель была развернуть альбомные страницы документа. Написал такую функцию.
Можно ее модифицировать просто для Ваших целей - пусть плюсует размеры в массив. Можно использовать чистый fitz, не PyPDF2.
def PDFprocess(input,output):
pdf_in = open(input, 'rb')
pdf_reader = PyPDF2.PdfReader(pdf_in)
pdf_writer = PyPDF2.PdfWriter()
src = fitz.open(input) #Параллельно открытие документа через fitz
for pagenum in range(len(pdf_reader.pages)):
page = pdf_reader.pages[pagenum]
print('Номер страницы', pagenum)
print(page.get('/Rotate'))
ipage=src.load_page(pagenum)
#if ipage.rect.width > ipage.rect.height
print('Ширина через fitz',ipage.rect.width)
print('Ширина через PyPDF2',page.mediabox.width)
print('Высота через fitz',ipage.rect.height)
print('Высота через PyPDF2',page.mediabox.height)
if (ipage.rect.width > ipage.rect.height):
page.rotate(90)
print('Cтраницу с номером', pagenum, 'нужно развернуть')
pdf_writer.add_page(page)
pdf_out = open(output, 'wb')
pdf_writer.write(pdf_out)
pdf_out.close()
pdf_in.close()