PDFKit Обмен содержимого аннотации

Можно текст (то есть contents) из FreeText изменить аннотацию в PDFKit, не удаляя аннотацию / создавая новую аннотацию?

Следующий фрагмент не изменяет содержание аннотации при просмотре в PDFView:

let url = Bundle.main.url(forResource: "Test", withExtension: "pdf")!
let document = PDFDocument(url: url)!

for index in 0..<document.pageCount {
    let page: PDFPage = document.page(at: index)!
    let annotations = page.annotations
    for annotation in annotations {
        annotation.contents = "[REPLACED]"
    }
}
mainPDFView.document = document

Это работает, но требует замены аннотации (и, следовательно, необходимости копировать все остальные детали аннотации):

let url = Bundle.main.url(forResource: "Test", withExtension: "pdf")!
let document = PDFDocument(url: url)!

for index in 0..<document.pageCount {
    let page: PDFPage = document.page(at: index)!
    let annotations = page.annotations
    for annotation in annotations {
        print(annotation)
        page.removeAnnotation(annotation)
        let replacement = PDFAnnotation(bounds: annotation.bounds,
                                        forType: .freeText,
                                        withProperties: nil)

        replacement.contents = "[REPLACED]"
        page.addAnnotation(replacement)
    }
}

mainPDFView.document = document

Примечание: добавление / удаление той же самой аннотации также не помогает.

2 ответа

Я предлагаю вам перебрать массив аннотаций с помощью классического цикла for и найти индекс аннотации, которую вы хотите изменить, после этого подписка массива должна изменить аннотацию "на месте".

Вот пример, который изменяет все аннотации:

let url = Bundle.main.url(forResource: "Test", withExtension: "pdf")!
let document = PDFDocument(url: url)!

for index1 in 0..<document.pageCount {
    let page: PDFPage = document.page(at: index)!
    let annotations = page.annotations
    for index2 in 0..<annotations.count {
        annotations[index2].contents = "[REPLACED]"
    }
}

Прочитайте о мутирующих массивах: http://kelan.io/2016/mutating-arrays-of-structs-in-swift/

Надеюсь, это поможет, ура!

LE: На самом деле это ошибка, посмотрите на эту: iOS 11 PDFKit не обновляет позицию аннотации

Возможно, Apple найдет способ обновить PDFView на экране при изменении содержимого аннотации СКОРО.

Вы пробовали звонить pdfView.annotationsChanged(on: pdfPage) после обновления текста аннотации?

Другие вопросы по тегам