我遇到了同样的问题,我在应用程序中打开一个带有表单的 PDF,并用来自不同文本字段的数据填充它。不幸的是,由于 mkl 对此进行了很好的解释,所有注释在所有 Pdf 阅读器上都可见,希望大多数人使用的那个...Acrobat ...我一直在寻找解决方案,但不幸的是 PDFKit 没有在这个时候一个扁平化PDF的选项,我不得不想出一个“丑陋”的解决方案。但至少对于我的需要它有效。使用所有注释更新 PDF 表单后,我将其转换为图像,然后将其转换回 PDF。我现在有一个“扁平化”的 pdf ......这不是很好,我希望 Apple 将来会在他们的 PDFkit 中添加一个扁平化 pdf 的功能。
如果有更好的解决方案,请告诉我!
转换为图像
func pdfToImage(url: URL) -> [UIImage]? {
let pdfDocument = PDFDocument(url: url)!
let numbPages = pdfDocument.pageCount
var imagePdf = [UIImage]()
for i in 0...numbPages-1 {
let page = pdfDocument.page(at: i)!
let bounds = page.bounds(for: .mediaBox)
let renderer = UIGraphicsImageRenderer(bounds: bounds, format: UIGraphicsImageRendererFormat.default())
let img = renderer.image { (context) in
context.cgContext.saveGState()
context.cgContext.translateBy(x: 0, y: bounds.height)
context.cgContext.concatenate(CGAffineTransform.init(scaleX: 1, y: -1))
page.draw(with: .mediaBox, to: context.cgContext)
context.cgContext.restoreGState()
}
imagePdf.append(img)
}
return imagePdf
}
转换回PDF
func imageToPDF(image: [UIImage])-> PDFDocument? {
let pdfDocument = PDFDocument()
for (index,image) in image.enumerated() {
let pdfPage = PDFPage(image: image)
pdfDocument.insert(pdfPage!, at: index)
}
return pdfDocument
}
然后我只是调用这些函数
let imageFromPdf = pdfToImage(url: pdfURL)!
let flattenPDF = imageToPDF(image: imageFromPdf)
flattenPDF?.write(to: pdfURL2)