【发布时间】:2021-12-03 08:35:46
【问题描述】:
我有一个允许用户在 PDF 上绘图的应用程序。用户的绘图被保存为图像,然后添加到现有的 PDF 中。我遇到的问题是用户已经绘制了 2 张图像。出于某种原因,保存第三张图像会导致第二张图像被第一张覆盖。下面是一个例子。
PDF 示例:
上面的PDF应该是First、Second、Third;但是,第二张图片被第一张覆盖了。
以下是我将图像嵌入 PDF 的代码。请注意,我也使用 PDFKit 进行了尝试,并遇到了相同的结果:
func saveImageToPDF(path: String , drawnImage: UIImage, x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat, pageIndex: Int) {
if let pdf = CGPDFDocument(NSURL(fileURLWithPath: path)) {
let pageCount = pdf.numberOfPages
// Write to file
UIGraphicsBeginPDFContextToFile(path, CGRect.zero, nil)
for index in 1...pageCount {
let page = pdf.page(at: index)
let pageFrame = page?.getBoxRect(.mediaBox)
if (pageFrame != nil) {
UIGraphicsBeginPDFPageWithInfo(pageFrame!, nil)
let pdfContext = UIGraphicsGetCurrentContext()
// Draw existing page
pdfContext?.saveGState()
pdfContext?.scaleBy(x: 1, y: -1)
pdfContext?.translateBy(x: 0, y: -pageFrame!.size.height)
pdfContext?.drawPDFPage(page!)
pdfContext?.restoreGState()
// Draw image on top of page
if (index == (pageIndex + 1)) {
drawnImage.draw(in: CGRect(x: x, y: y, width: width, height: height))
}
}
}
UIGraphicsEndPDFContext()
}
}
注意:我似乎只在 iOS 15 上遇到过这个问题。在 iOS 14 上运行相同的代码就像是一种魅力。
我应该认为这是 iOS 15 上的一个错误,还是我遗漏了什么?
提前致谢!
【问题讨论】:
-
这似乎是一个逻辑错误,通过使用调试器在第 3 行在此函数内进行调试,一张一张打印您的图像
-
我的函数一次添加一个图像。我可以确认每次添加正确的图像。另一个发现是,在我添加 2 张运行此函数且已注释掉的 drawImage.draw 的图像后,仍然会覆盖第二张图像。所以这似乎是保存问题,而不是图像添加问题。
-
这是不可能的,你应该在渲染时打印图像,我在 docfill 应用程序上使用相同的功能,当你的数据混合在一起时,就会发生这种问题,比如滚动时的 collectionview 重新加载行为
-
我已经记录了图像及其对应的字节。它们看起来也很独特:
8757 bytes <UIImage:0x600001e513b0 anonymous {512, 256} renderingMode=automatic> 8095 bytes <UIImage:0x600001e5b840 anonymous {512, 256} renderingMode=automatic> 4641 bytes <UIImage:0x600001e29290 anonymous {512, 256} renderingMode=automatic>这个问题很奇怪,因为我的代码适用于 iOS 14
标签: ios swift pdf core-graphics ios-pdfkit