Как отключить редактирование PDF-аннотаций? - PullRequest
0 голосов
/ 21 января 2019

Я создаю iOS-приложение в Swift 4.2, которое может сделать подпись в PDF-файле.Но в случае встраивания подписи в PDFAnnotation ее можно редактировать в приложении Apple Preview или другом приложении, которое может редактировать pdf.Как я могу отключить редактирование PDFAnnoations ??

"Подпись" создается UIImage, который конвертирует beizerpath почерка.

class SignatureAnnotation: PDFAnnotation {

    var image: UIImage!

    init(with image: UIImage!, forBounds bounds: CGRect, withProperties properties: [AnyHashable : Any]?) {
        super.init(bounds: bounds,
                   forType: PDFAnnotationSubtype.freeText,
                   withProperties: properties) 
        self.image = image
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError()
    }

    override func draw(with box: PDFDisplayBox, in context: CGContext) {
        guard let cgImage = self.image.cgImage else { return }
        context.draw(cgImage, in: self.bounds)
    }

}

func embedSignatureToPDF() {
    let page = pdfView.currentPage
    let signatureAnnotation = SignatureAnnotation(with: signature, forBounds: signatureRect, withProperties: nil)
        page.addAnnotation(signatureAnnotation)
}

1 Ответ

0 голосов
/ 17 февраля 2019

Я наконец-то нашел решение!

Идея здесь не в том, чтобы использовать PDFAnnotation!.

Подпись - Изображение поэтому, когда пользователь сохраняет PDF

вы будете использовать подпись Image создать новый PDF и сохраните его в том же файле PDF

поставить свою подпись там, где вы хотите вам нужно изменить X и Y image.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))

код ниже получит путь к PDF обычно сохраняется в папке с документами вам просто нужно отправить путь к файлу а также изображение подписи и функция добавит изображение над PDF и сохранит его

   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()
    }
...