Мы используем PDFKit для выделенного текста, но он не работает гладко.
Вот мой код.
if(panGesture.state == UIGestureRecognizerState.changed)
{
page = self.pdfView.document?.page(at: panGesture.view!.tag)
if point.x > (page?.bounds(for: .cropBox).width)! - 10 {
return
}
if let selection = page?.selection(from: start_point_highlight ?? CGPoint.zero, to: point) {
selection.color = UIColor.purple
let rect = (selection.bounds(for: page!))
if selectionRect.contains(rect){
}else{
if rect.size.width < 1 || rect.size.height > 25 {
return
}
selectionRect.append((selection.bounds(for: page!)))
self.addHighlightSelectionAnnotation(rect: (selection.bounds(for: page!)), page: page! , pageNumber: panGesture.view!.tag)
}
}
}
func addHighlightSelectionAnnotation(rect : CGRect , page : PDFPage , pageNumber : Int? = 0 , isLastWord : Bool = false, isRightToLeft : Bool = false) {
let highlight = PDFAnnotation(bounds: updated_rect, forType: .highlight, withProperties: nil)
highlight.endLineStyle = .square
let dateFormat3 = DateFormatter()
dateFormat3.dateFormat = "MMM d, h:mm a"
let created_date = dateFormat3.string(from: Date())
highlight_name.append(created_date)
highlight.userName = highlight_name
if (self.slider_lineTransparency.value/100) > 0.9 {
let clr = UIColor.init(hex: self.selectedColor as String)
highlight.color = clr.withAlphaComponent(0.5)
}else{
let crl = UIColor.init(hex: self.selectedColor as String)
let alpha = CGFloat(self.slider_lineTransparency.value/100)
highlight.color = crl.withAlphaComponent(0.5)
}
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
let seconds = calendar.component(.second, from: date)
highlight.backgroundColor = UIColor.clear
page.addAnnotation(highlight)
}
Мы используем событие касания для получения точки касания и затем получаем слово PDFв этой точке и выделите его, но если пользователь быстро проведет пальцем, то некоторые слова будут пропущены.
Если у вас есть предложения по реализации выделения текста PDF с использованием PDFKit в Swift4 +, то сообщите нам об этом треке.