Код: Выделить всё
func drawPDFfromURL(url: URL) -> UIImage? {
guard let document = PDFDocument(url: url),
let page = document.page(at: 0) else { return nil }
let scale = CGFloat(3.0)
let pageRect = page.bounds(for: .mediaBox)
let scaledSize = CGSize(width: pageRect.width * scale, height: pageRect.height * scale)
let rendererFormat = UIGraphicsImageRendererFormat()
rendererFormat.scale = 1 // can maybe use rendererFormat.scale = UIScreen.main.scale
rendererFormat.opaque = false
let renderer = UIGraphicsImageRenderer(size: scaledSize, format: rendererFormat)
let image = renderer.image { ctx in
let context = ctx.cgContext
UIColor.lightText.set() // setting this to light text helped solve heaps of problems.
context.fill(CGRect(origin: .zero, size: scaledSize))
context.saveGState()
// Flip and scale for proper rendering
context.translateBy(x: 0.0, y: scaledSize.height)
context.scaleBy(x: scale, y: -scale)
// Enhance line widths for thin fonts
context.setLineWidth(2.0)
context.setLineJoin(.round)
context.setLineCap(.round)
page.draw(with: .mediaBox, to: context)
context.restoreGState()
}
return image
}
< /code>
Вот мой фанк извлечения текста: < /p>
func getTextFromImage(image: UIImage) {
guard let cgImage = image.cgImage else { return }
let request = VNRecognizeTextRequest { request, error in
guard let results = request.results as? [VNRecognizedTextObservation] else {
print("No text found.")
return
}
var wordItems: [(text: String, rect: CGRect)] = []
for observation in results {
guard let candidate = observation.topCandidates(1).first else { continue }
let stringRange = candidate.string.startIndex.. $1.key })
// For each line: sort words left-to-right and join
let lines = sortedLines.map { (_, words) in
words.sorted(by: { $0.rect.origin.x < $1.rect.origin.x })
.map(\.text)
.joined(separator: " ")
}
let rawText = lines.joined(separator: "\n")
print("OCR with Layout:\n\(rawText)")
}
request.recognitionLevel = .accurate
request.recognitionLanguages = ["en-US"]
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try? handler.perform([request])
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... conversion
Мобильная версия