【问题标题】:How to get PDF box size from CGPDFPage如何从 CGPDFPage 获取 PDF 框大小
【发布时间】:2017-06-07 08:14:47
【问题描述】:

我遇到了错误,但是我尝试在 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 不能做的其他事情。)

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

【问题讨论】:

    标签: swift macos cgpdf


    【解决方案1】:

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

    【讨论】:

    • rotatedBox 是一个 CGRect,但我需要 CGPDFBox 对象来传递 myCGPDFpage.getBoxRect 方法。错误消息说:无法将“CGRect”类型的值转换为指定的“CGPDFBox”类型。请帮忙。我正在使用 Swift 3。谢谢。
    • @appFormation:我不确定我是否理解你的问题。 CGPDFBox 是一个枚举并指定您要在getBoxRext() 中检索的哪个 框(媒体框、剪辑框、艺术框...)。上面的代码通过.media,你可以用你的值替换它。
    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 2017-02-21
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2020-06-27
    相关资源
    最近更新 更多