복붙노트

[SWIFT] 사과 PDFKit에 잘못된 하이라이트 주석

SWIFT

사과 PDFKit에 잘못된 하이라이트 주석

해결법


  1. 1.PDFSelection 경계 (forPage : 메소드가 반환 한 사각형은 전체 선택 영역을 충족합니다. 귀하의 경우 최선의 해결책이 아닙니다.

    PDFSelection 경계 (forPage : 메소드가 반환 한 사각형은 전체 선택 영역을 충족합니다. 귀하의 경우 최선의 해결책이 아닙니다.

    selectionsByLine ()을 시도하고 PDF의 모든 하나의 선택된 라인을 대표하는 모든 RECT에 대한 개별 주석을 추가 할 수 있습니다. 예:

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

  2. 2.PDFKit 강조 주석의 제안으로 : quadrilateralPoints를 동일한 주석에 다른 라인 하이라이트를 추가 quadrilateralPoints를 사용할 수 있습니다.

    PDFKit 강조 주석의 제안으로 : quadrilateralPoints를 동일한 주석에 다른 라인 하이라이트를 추가 quadrilateralPoints를 사용할 수 있습니다.

    func highlight() {  
        guard let selection = pdfView.currentSelection, let currentPage = pdfView.currentPage else {return}
        let selectionBounds = selection.bounds(for: currentPage)
        let lineSelections = selection.selectionsByLine()
    
        let highlightAnnotation = PDFAnnotation(bounds: selectionBounds, forType: PDFAnnotationSubtype.highlight, withProperties: nil)
    
        highlightAnnotation.quadrilateralPoints = [NSValue]()
        for (index, lineSelection) in lineSelections.enumerated() {
            let n = index * 4
            let bounds = lineSelection.bounds(for: pdfView.currentPage!)
            let convertedBounds = bounds.convert(to: selectionBounds.origin)
            highlightAnnotation.quadrilateralPoints?.insert(NSValue(cgPoint: convertedBounds.topLeft), at: 0 + n)
            highlightAnnotation.quadrilateralPoints?.insert(NSValue(cgPoint: convertedBounds.topRight), at: 1 + n)
            highlightAnnotation.quadrilateralPoints?.insert(NSValue(cgPoint: convertedBounds.bottomLeft), at: 2 + n)
            highlightAnnotation.quadrilateralPoints?.insert(NSValue(cgPoint: convertedBounds.bottomRight), at: 3 + n)
        }
    
        pdfView.currentPage?.addAnnotation(highlightAnnotation)
    }
    
    extension CGRect {
    
        var topLeft: CGPoint {
            get {
                return CGPoint(x: self.origin.x, y: self.origin.y + self.height)
            }
        }
    
        var topRight: CGPoint {
            get {
                return CGPoint(x: self.origin.x + self.width, y: self.origin.y + self.height)
            }
        }
    
        var bottomLeft: CGPoint {
            get {
                return CGPoint(x: self.origin.x, y: self.origin.y)
            }
        }
    
        func convert(to origin: CGPoint) -> CGRect {
            return CGRect(x: self.origin.x - origin.x, y: self.origin.y - origin.y, width: self.width, height: self.height)
        }
    }
    
  3. from https://stackoverflow.com/questions/47469528/wrong-highlight-annotation-on-apple-pdfkit by cc-by-sa and MIT license