Как установить значение редактируемого текстового поля (аннотации) в формате PDF? - PullRequest
0 голосов
/ 09 января 2020

В моем приложении пользователи будут вводить информацию на одном экране, который помещается в базу данных. На другом экране я хочу отобразить PDF-файл с их информацией, используемой для заполнения текстовых полей редактирования (аннотации). В приведенном ниже примере пользователь может нажать «Джон Смит» и ввести новое имя.

enter image description here

Использование ios PDFKit Я могу отобразить PDF и позволяют пользователю редактировать. Я не могу обновить текст в текстовых полях или изменить статус флажков. Похоже, у меня есть права на чтение / запись для pdf.

С моим текущим кодом я смог получить количество страниц моего pdf и распечатать имена аннотаций каждой аннотации, чтобы я мог получить имена полей, для которых я хочу установить значения, но функция setvalue не работает, и проверка содержимого заполненного текстового поля показывает ноль.

override func viewDidLoad() {
    super.viewDidLoad()

    displayPDF()
    updatePDFText()
}

func displayPDF() {
    let pdfView = PDFView()

    pdfView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(pdfView)

    pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

    guard let path = Bundle.main.url(forResource: MY_PDF, withExtension: "pdf") else { return }

    if let document = PDFDocument(url: path) {
        pdfView.document = document
    }
}

func updatePDFText() {

    guard let path = Bundle.main.url(forResource: MY_PDF, withExtension: "pdf") else { return }

    if let document = PDFDocument(url: path) {
        for index in 0..<document.pageCount {
            if let page = document.page(at: index) {
                let annotations = page.annotations
                for annotation in annotations {
                    //print("Annotation Name :: \(annotation.fieldName ?? "")")
                    if annotation.fieldName == "SSN1" {
                        annotation.setValue("TEST", forAnnotationKey: .widgetValue)
                        page.removeAnnotation(annotation)
                        page.addAnnotation(annotation)
                    } else if annotation.fieldName == "District" {
                        annotation.buttonWidgetState = .onState
                        page.removeAnnotation(annotation)
                        page.addAnnotation(annotation)
                    }
                }
            }
        }
    }
}

Есть ли проблема с моей реализацией или есть другой метод программного обновления pdf-аннотаций?

...