Как сохранить текст на одиночном PDF в преобразование изображения?IOS

Программируем под IOS
Ответить
Anonymous
 Как сохранить текст на одиночном PDF в преобразование изображения?

Сообщение Anonymous »

Попытка импортировать ежедневные обязанности пользователя, которые являются форматом PDF. PDF содержит не более 20 дат и комбинации аэропорта/времени, которые мне нужно захватить из документа. У меня есть текстовая сторона, работающая хорошо, так что это не проблема. Для этого я попробовал .string , а также .attributedString , оба были бесполезны. Этот метод, по -видимому, работает точно так же, как это необходимо, когда он работает. В настоящее время он теряет качество и, следовательно, пропускает текст или неправильно прочитать его полностью. Должен быть лучший и более надежный способ сделать это обращение и извлечение. Если бы кто-то мог помочь, это было бы здорово, я слишком долго работал над этим.

Код: Выделить всё

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])
}
Я пробовал множество различных комбинаций uicolor.lighttext.set () с различными цветами шкалы , ytolerance , setlinewidth , чтобы попробовать его как можно лучше. Я посмотрел повсюду, чтобы попробовать найти ответ, но не могу его найти.


Подробнее здесь: https://stackoverflow.com/questions/796 ... conversion
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»