Rander PDF新PDF中的注释

时间:2019-02-04 11:03:13

标签: ios swift pdf pdfkit pdf-annotations

我遵循了这个article

使用PDFAnnotation签名PDF

您可以在文章here

中使用下载项目。

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

并且因为我的应用是“客户端到客户端”

因此客户端1对PDF签名,然后将其发送给客户端2 并让Client 2签名PDF

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

此外,您可以下载此PDF

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

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方法!

感谢tempire 和他的code

我确实将其转换为Swift 4.2

这里的想法不是使用PDFAnnotation!。

签名是图像 所以当用户保存PDF

我将使用签名图像 创建新的PDF 并将其保存到相同的PDF文件

将您的签名放在所需的位置 您需要修改 X Y 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()
    }