Rander PDF Аннотации в новом PDF - PullRequest
       48

Rander PDF Аннотации в новом PDF

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

Я следовал этой статье

, чтобы подписать PDF с помощью PDFAnnotation

, вы можете скачать проект, используя в статье здесь

моя проблема в том, что это PDFAnnotation, если я загружаю pdf на свой компьютер, а затем открываю его с помощью Preview или любого приложения PDFviewer, я могу перемещать PDFAnnotation по всей странице!

и потому что мое приложение является клиент-клиентом

поэтому Клиент 1 подписывает PDF, а затем отправляет его Клиенту 2, а также Клиенту 2 подпись PDF

, поэтому мне нужно рендерить новый PDF, это означает, что PDF-аннотация стала внутри PDF,не как PDFAnnotation

Кроме того, вы можете скачать этот PDF

, вы заметите мою проблему и то, как две PDFAnnotations можно перемещать

1 Ответ

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

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

Благодаря tempire и его коду

Я преобразовал его в 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()
    }
...