如何从CGPDFPage获取PDF框大小

时间:2017-06-07 08:14:47

标签: swift macos cgpdf

我遇到错误但是我试图在Swift中获取PDF页面的媒体框。:

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.mediaBoxmediaBox以及几乎所有其他变体。它在python中工作正常。 我也可以使用PDFPage(而不是CGPDFPage)获取信息,但我需要将CGPDFPage用于PDFPage无法执行的其他操作。)< / p>

第二部分是:据我所知,mediaBox结果不考虑旋转。因此,横向页面可能有一个旋转为90的纵向媒体框。是否有任何简单的方法来获取“实际”显示尺寸,或者我是否必须自己进行转换?

1 个答案:

答案 0 :(得分:3)

PDF页面从1开始编号,而不是零。 getBoxRect() 在Swift 3中使用enum CGPDFBox参数。所以这应该有效:

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