0

我关注了这篇文章

使用 PDFAnnotation 对 PDF 进行签名

您可以在此处下载文章中使用的项目

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

因为我的应用程序是客户端到客户端

所以客户 1 签署 PDF,然后将其发送给客户 2,客户 2 也签署 PDF

那为什么我需要渲染新的pdf,这意味着PDFAnnotation变成了PDF,而不是PDFAnnotation

此外,您可以下载此PDF

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

4

1 回答 1

0

我终于找到了解决办法!

感谢tempire 和他的代码

我确实将它转换为 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()
    }
于 2019-02-17T12:12:17.847 回答