如何在 PDFKit 中计算 PDFPage 大小?

How PDFPage size is calculated in PDFKit?

我在代码中所做的就是遍历我的图像集中的每个图像:

        print(UIScreen.main.scale) //3.0
        print(UIScreen.main.nativeScale) //3.0
        for card in box.sortedCards {
            if let image = card.image?.scaledWithMaxWidthOrHeightValue(value: 300) {
                print(image.size.width) //300
                print(image.size.height) //300
                if let page = PDFPage(image: image) {
                    document.insert(page, at: document.pageCount)
                }
            }
        }

但是,一旦我使用 UIActivityViewController 预览我的 PDFDocument,然后将其分享到我的 mac 书中,我得到以下结果:

如何计算?

通过 UIActivityViewController 分享到我的 mac 的每张图片都有以下信息:

我需要什么?

我需要计算图像大小,预览 PDFDocument 时每页精确 10 厘米对 10 厘米,无论使用什么 ios 设备。

如何计算

图像的物理尺寸(以像素为单位)等于图像的逻辑尺寸乘以图像的比例因子。

Image Size (pixels) = UIImage.size * UIImage.scale

如果比例因子为 1,则图像的 DPI 为每英寸 72 像素。

Image DPI (pixels/inch) = UIImage.scale * 72.0

获取页面大小:

Page Size (inches) = Image Size / Image DPI

如何获得精确的 10 x 10 厘米尺寸的页面

我不确定您的 scaledWithMaxWidthOrHeightValue 是如何实施的。为了说明计算,我假设您已经有一个 UIImage 的实例,其中 size 300x300.

print(UIScreen.main.scale) //3.0
print(UIScreen.main.nativeScale) //3.0
for card in box.sortedCards {
    if let image = card.image?.scaledWithMaxWidthOrHeightValue(value: 300) {
        print(image.size.width) //300
        print(image.size.height) //300
        let defaultDPI = 72.0
        let centimetersPerInch = 2.54
        let expectedPageSize = 10.0 // centimeters
        var scale = 300.0 / defaultDPI * centimetersPerInch / expectedPageSize * image.scale.native
        scale += 0.001 // work around accuracy to get exact 10 centimeters
        if let cgImage = image.cgImage {
            let scaledImage: UIImage = UIImage(cgImage: cgImage, scale: CGFloat(scale), orientation: image.imageOrientation)
            if let page = PDFPage(image: scaledImage) {
                document.insert(page, at: document.pageCount)
            }
        }
    }
}