Search code examples
iosswiftpdfpdfkit

Wrong highlight annotation on apple PDFKit


I'm using PDFKit on iOS to highlight texts (PDF file). I do it by create a PDFAnnotation and add it to the selected text area. I want to highlight precisely the selected area but it always covers the whole line like the pics below. How can I create the annotation for the selected area only??

My code:

        let highlight = PDFAnnotation(bounds: selectionText.bounds(for: page), forType: PDFAnnotationSubtype.highlight, withProperties: nil)
        highlight.color = highlightColor
        page.addAnnotation(highlight)

Selected text

Highlighted text


Solution

  • PDFSelection bounds(forPage:) method returns one rectangle to satisfy whole selection area. Is not the best solution in your case.

    Try with selectionsByLine(), and add individual annotation for every rect, representing every single selected line in PDF. Example:

        let selections = pdfView.currentSelection?.selectionsByLine()
        // Simple scenario, assuming your pdf is single-page.
        guard let page = selections?.first?.pages.first else { return }
    
        selections?.forEach({ selection in
            let highlight = PDFAnnotation(bounds: selection.bounds(for: page), forType: .highlight, withProperties: nil)
            highlight.endLineStyle = .square
            highlight.color = UIColor.orange.withAlphaComponent(0.5)
    
            page.addAnnotation(highlight)
        })