VNDocumentCamera扫描到可搜索的PDF

问题描述 投票:0回答:2

PDFDocument
的帮助下获得
VNDocumentCameraScan
后,我目前正在尝试创建一个可搜索的
VNDocumentCameraViewController

目前我只拍摄扫描图像并将它们放入

PDFDocument
实例中。


func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFinishWith scan: VNDocumentCameraScan) {
   let pdf = createPDF(from: scan)
} 

fileprivate func createPDF(from scan: VNDocumentCameraScan) -> PDFDocument {
    let pdfDocument = PDFDocument()
    for i in 0 ..< scan.pageCount {
        let pdfPage = PDFPage(image: scan.imageOfPage(at: i))
            pdfDocument.insert(pdfPage!, at: i)
        }
    return pdfDocument
}

我也知道如何从

VNDocumentCameraScan
中提取文本。我怀念的是如何将文本信息合并到
PDFDocument
实例中。我需要这个,因为我想扫描文档,将它们另存为
.pdf
到文件系统,然后搜索它们。

我搜索了很多,但没有找到方法。

有谁知道我将如何实现这个目标?

ios swift ios-pdfkit visionkit
2个回答
3
投票

这篇博文详细介绍了该主题。我链接到系列的第 3 部分,因为它解决了您遇到的流程部分。

https://alexanderweiss.dev/blog/2021-03-29-from-uiimage-to-searchable-pdf-part-3

主要思想是在 pdf 中的图像下方绘制识别的文本。文章中的基本步骤:

  1. 拍照
  2. 识别图像上的文字
  3. 使用图像尺寸创建 PDF 页面
  4. 使用识别的文字绘制文字
  5. 在 pdf 文本上方绘制图像

VNRecognizedText 包含有关已识别文本位置的信息,使您可以确定在何处绘制文本。我能够在我的应用程序中成功使用这篇文章中的代码;尽管在处理手写文本时它并不是 100% 完美,但它的效果相当不错。


0
投票

使用 Nefertiti,一个开源库,用于从 UIImage 对象数组生成可搜索的 PDF 文档。

    var pageImages = [UIImage]()
        
    for pageIndex in 0 ..< scan.pageCount {
       pageImages.append(scan.imageOfPage(at: pageIndex))
    }

    nefertiti.generatePdfDocumentFile(from: pdfPageImages) { file, error in
       if let error = error {
          debugPrint(error)
          return
       }

       print("A URL to the whole PDF document data: \(file. documentDataUrl)")
       print("A URL to a document thumbnail for a small preview: \(file. thumbnailDataUrl)")
    }

Nefertiti 可作为 Swift 包使用:https://github.com/D-Integral/Nefertiti/

© www.soinside.com 2019 - 2024. All rights reserved.