Как получить размер PDF коробки из CGPDFPage

Я получаю ошибки, однако я пытаюсь получить медиабокс PDF-страницы в Swift.:

if let pdf = CGPDFDocument(pdfURL) {
    let numberOfPages = pdf.numberOfPages
    for index in 0...numberOfPages {
        let pdfPage = pdf.page(at: index)
        print(CGPDFPageGetBoxRect(pdfPage!, kCGPDFMediaBox))

}

Я также попробовал:

print(pdfPage.getBoxRect(kCGPDFMediaBox))

а также используя PDFDisplayBox.mediaBox, mediaBox и в значительной степени любой другой вариант. Он отлично работает в Python. Я также могу получить информацию, используя PDFPage (в отличие от CGPDFPage), но мне нужно использовать CGPDFPage для других вещей, которые PDFPage не могу сделать.)

Вторая часть: из того, что я могу сказать, результат mediaBox не учитывает ротацию. Таким образом, альбомная страница с альбомной ориентацией может иметь мультимедийный портретный портрет с поворотом на 90. Есть ли какой-нибудь простой способ получить "фактические" размеры экрана или мне нужно выполнить преобразование самостоятельно?

1 ответ

Решение

Страницы PDF нумеруются, начиная с 1, не в ноль. А также getBoxRect()занимает enum CGPDFBox аргумент в Swift 3. Так что это должно работать:

for pageNo in 1...pdf.numberOfPages {
    if let pdfPage = pdf.page(at: pageNo) {
        let mediaBox = pdfPage.getBoxRect(.mediaBox)
        print(mediaBox)
    }
}

Ограничительные рамки PDF не учитывают поворот страницы. Следующее может работать для вычисления повернутой рамки (не проверено):

// Get rotation angle and convert from degrees to radians:
let angle = CGFloat(pdfPage.rotationAngle) * CGFloat.pi / 180
// Apply rotation transform to media box:
let rotatedBox = mediaBox.applying(CGAffineTransform(rotationAngle: angle))
Другие вопросы по тегам