如何在 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)
}
}
}
}
我在代码中所做的就是遍历我的图像集中的每个图像:
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)
}
}
}
}