新 PDF 中的 Rander PDFAnnotation

Rander PDFAnnotation within new PDF

我关注了这个article

使用 PDFAnnotation 对 PDF 签名

您可以下载文章中使用的项目here

我的问题是因为它是 PDFAnnotation 如果我在我的计算机上下载 pdf 然后使用预览或任何 PDFviewer 应用程序打开它 我可以在页面上移动 PDFAnnotation!

并且因为我的应用是客户端对客户端

所以客户1在PDF上签名然后发送给客户2 以及客户 2 签署 PDF

这就是为什么我需要呈现新的 pdf,这意味着 PDFAnnotation 变成了 PDF,而不是 PDFAnnotation

另外,你可以下载这个PDF

您会注意到我的问题以及如何移动两个 PDFAnnotations

我终于找到解决办法了!

感谢tempire 和他的 code

我确实把它转换成了 Swift 4.2

这里的思路是不使用PDFAnnotation!

签名是一张图片 所以当用户保存 PDF

我会用签名图 创建新的 PDF 并将其保存到同一个 PDF 文件

把你的签名放在你想要的地方 您需要修改 XY image.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))

   func drawOnPDF(path: String , signatureImage:UIImage) {

        // Get existing Pdf reference
    let pdf = CGPDFDocument(NSURL(fileURLWithPath: path))

        // Get page count of pdf, so we can loop through pages and draw them accordingly
    let pageCount = pdf?.numberOfPages


        // Write to file
        UIGraphicsBeginPDFContextToFile(path, CGRect.zero, nil)

        // Write to data
        //var data = NSMutableData()
        //UIGraphicsBeginPDFContextToData(data, CGRectZero, nil)

        for index in 1...pageCount! {

            let page =  pdf?.page(at: index)

            let pageFrame = page?.getBoxRect(.mediaBox)


            UIGraphicsBeginPDFPageWithInfo(pageFrame!, nil)

            let ctx = UIGraphicsGetCurrentContext()

            // Draw existing page
            ctx!.saveGState()

            ctx!.scaleBy(x: 1, y: -1)

            ctx!.translateBy(x: 0, y: -pageFrame!.size.height)
            //CGContextTranslateCTM(ctx, 0, -pageFrame.size.height);
            ctx!.drawPDFPage(page!)
            ctx!.restoreGState()

            // Draw image on top of page
            let image = signatureImage
            image.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))
            // Draw red box on top of page
            //UIColor.redColor().set()
            //UIRectFill(CGRectMake(20, 20, 100, 100));
        }


        UIGraphicsEndPDFContext()
    }