2017-06-07 64 views
0
获得PDF箱尺寸

遇到错误,但是我试图得到一个PDF页面的媒体框斯威夫特:如何从CGPDFPage

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不能做)

第二部分是:从我所知道的, mediaBox结果不会考虑轮换。因此,横向页面可能会有一个90度旋转的肖像媒体箱。有没有简单的方法来获得“实际”显示尺寸,还是我必须自己进行转换?

回答

2

PDF页面从1开始编号,而不是零。而getBoxRect() 发生在斯威夫特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)) 
+0

rotatedBox是的CGRect,但我需要CGPDFBox对象myCGPDFpage.getBoxRect方法传递。错误消息说:不能将类型'CGRect'的值转换为指定类型'CGPDFBox'。请帮忙。我正在使用Swift 3.谢谢。 – appFormation

+0

@appformamation:我不确定我是否理解你的问题。 'CGPDFBox'是一个枚举,指定你想在'getBoxRext()'(媒体盒,剪辑盒,artbox等)中检索哪个*框。上面的代码通过'.media',你可以用你的值替换它。 –