我正在尝试获取每个 pdf 页面的图像(高质量)。我正在使用下面的代码通过 for 循环运行,直到页数计数并且它可以工作。
guard let document = CGPDFDocument(pdfurl as CFURL) else { return }
guard let page = document.page(at: i) else { return }
let dpi: CGFloat = 300.0/72.0
let pagerect = page.getBoxRect(.mediaBox)
print(pagebounds)
print(pagerect)
let render = UIGraphicsImageRenderer(size: CGSize(width: pagerect.size.width * dpi, height: pagerect.size.height * dpi))
let imagedata = render.jpegData(withCompressionQuality: 0.5, actions: { cnv in
UIColor.white.set()
cnv.fill(pagerect)
cnv.cgContext.translateBy(x: 0.0, y: pagerect.size.height * dpi)
cnv.cgContext.scaleBy(x: dpi, y: -dpi)
cnv.cgContext.drawPDFPage(page)
})
let image = UIImage(data: imagedata)
我遇到了以下问题...
- 有时
image
是nil
。 - 当它运行时,使用
memory is very high
. - 随着页数(页数),内存使用率非常高,有时它会
1.4 GB
突然崩溃并显示警告:Terminate due to memory waring
。然后我尝试在里面运行上面的代码autoreleasepool
。它确实有效,但是当内存使用率更高时(当它接近 RAM 大小时),应用程序再次崩溃并出现上述警告。
如何避免此内存警告并获得高质量的图像表单 pdf 页面。希望有任何帮助。祝你今天过得愉快。