【问题标题】:Images are overwritten when modifying a PDF iOS修改 PDF iOS 时会覆盖图像
【发布时间】: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


【解决方案1】:

联系 Apple 的技术支持后。他们认为这是 iOS 15 的问题。

这是一个完全复制问题的示例项目:https://github.com/Manguelo/test-pdf-issue

请注意,应用程序应在 iOS 15.0 上运行

根据 PDFKit 团队的说法,这个错误应该在 iOS 15.2 beta 3 中得到解决。

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多