0

我遇到了错误,但是我尝试在 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))

以及 using PDFDisplayBox.mediaBoxmediaBox以及几乎所有其他变体。它在 python 中运行良好。我也可以使用PDFPage(而不是CGPDFPage)获得信息,但我需要CGPDFPage用于其他PDFPage不能做的事情。)

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

4

1 回答 1

3

PDF 页面的编号从 开始1,而不是从零开始。并在 Swift 3 中getBoxRect() 接受参数。所以这应该有效: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))
于 2017-06-07T08:27:17.910 回答