动态Web TWAIN是一个基于浏览器的图像处理工具,它允许开发者忽略底层细节,专注于重要的功能实现。2012年7月,Dynamic Web TWAIN 8.0版本发布,引入了OCR(光学字符识别)和条形码识别两项新技术。本文将重点介绍OCR插件,它允许开发者在不担心底层实现的情况下使用这项技术,同时保持灵活性。
Web版本的SDK由JavaScript控制,这是一种几乎所有Web开发者都熟悉的脚本语言。提供了广泛的函数和属性库,使开发者可以完全控制并轻松实现自己的界面。支持所有流行的浏览器,底层的Web TWAIN软件既提供作为ActiveX控件,也提供作为浏览器插件。使用Internet Explorer的用户可以使用ActiveX版本,而使用其他浏览器(如Firefox、Chrome、Safari和Opera)的用户可以使用插件版本。对于不使用Windows操作系统的用户,还提供了Mac插件版本。
Dynamic OCR支持超过40种语言,包括阿拉伯语和各种亚洲语言。支持所有常见的文件格式:jpg、gif、png、bmp、tiff等。支持多页文档处理、手写和印刷字符、字体名称和大小识别、详细的定位和格式信息,以及保持原始文档外观的PDF输出。此外,还可以在执行OCR之前与Dynamic Web TWAIN集成,以便编辑图像。
以下代码示例都是用JavaScript提供的,假设已经创建了一个名为WebTWAIN的WebTWAIN对象。
在OCR开始之前,可以更改一些设置,这些设置会影响输出。虽然提供了合理的默认值,但在许多情况下,更改设置可能是合适的。
OCRDllPath:需要设置为OCR dll文件所在的路径。默认情况下,设置为当前工作目录。
OCRTessDataPath:需要设置为应用程序的根路径,其中包含您希望使用的语言的tessdata文件夹。
OCRLanguage:默认设置为"eng"。这指的是您希望使用的语音文件的前缀。
OCRResultFormat:一个重要的设置,它决定了OCR结果是否保存到文本文件或PDF文件中。
OCRUseDetectedFont:确定OCR在输出PDF文档时是否尝试使用检测到的字体。检测到的字体需要在系统上存在才能使用,因此请谨慎使用此选项。
OCRUnicodeFontName:如果OCRUseDetectedFont关闭,则使用备用字体。此字体也必须存在于系统上。如果没有提供,库将尝试使用适合使用语言的适当字体。
OCRPageSetMode:默认设置对于大多数操作来说是可以的。这会影响OCR确定页面格式的方式,默认设置为自动。
在这个示例中,将对加载到TWAIN中的给定图像执行英文OCR。结果保存到名为OCRResults.txt的文本文件中。由于只进行文本输出,不需要担心任何字体设置,OCRDllPath和OCRTessDataPath等所有其他设置都使用默认值。
function DoOCR(imageIndex) {
WebTWAIN.OCRLanguage = "eng";
WebTWAIN.OCRResultFormat = 0; // 文本
return WebTWAIN.OCR(imageIndex, "OCRResults.txt");
// 返回true表示成功,false表示失败
}
OCR函数非常灵活,还允许直接从多个文件加载图像,文件路径相对于工作目录。在这个示例中,还将使用不同的OCRTessDataPath设置,并使用简体中文作为语言。
function ChineseOCR() {
WebTWAIN.OCRLanguage = "chi_sim";
WebTWAIN.OCRResultFormat = 0; // 文本
WebTWAIN.OCRTessDataPath = "../../tesseract-chinese/"; // 应包括最终/
return WebTWAIN.OCRDirectly("wendang1.tif|wendang2.tif|webdang3.tif", "ChineseOCR.txt");
}
使用中文作为语言展示了Dynamic OCR的UTF输出功能。生成的文本以UTF-8 Unicode编码,文件应由支持UTF-8的编辑器读取。
Dynamic OCR还支持直接输出到PDF文件。最简单的方法是输出纯文本,这对于主要包含文本的文档和扫描非常完美。下面的屏幕截图显示了下面源代码的PDF输出结果的一部分。
function OCRToPDF() {
WebTWAIN.OCRLanguage = "eng";
WebTWAIN.OCRResultFormat = 1; // 纯文本PDF
return WebTWAIN.OCRDirectly("Demo_OCR1.png", "Plain.pdf");
}
正如清楚看到的,纯文本PDF完美地保持了所有文本及其定位信息。然而,颜色、斜体和图像丢失了。在许多情况下,这可能是可以接受的或期望的结果,但在其他情况下,图像很重要,应该使用Image-over-Text选项。
图像覆盖文本的PDF保持了文档的原始外观,但增加了选择、复制和搜索文本的能力。它们非常适合扫描包含图像和复杂格式的复杂表格、书籍或其他文档。以下是相同代码的示例,只是OCRResultFormat设置为图像覆盖文本。
function OCRToPDF() {
WebTWAIN.OCRLanguage = "eng";
WebTWAIN.OCRResultFormat = 2; // 图像覆盖文本
return WebTWAIN.OCRDirectly("Demo_OCR1.png", "ImageOverText.pdf");
}
上面的图像是生成的PDF的屏幕截图,其中一些文本被选中。如您所见,文本选择是准确的,OCR结果可以像文本文档一样复制或搜索。
当然,OCR的结果也可以保存在内存中,无论是以纯文本还是PDF的形式。在这个示例中,结果保存到一个纯文本字符串中。如果OCRResultFormat没有设置为0,字符串也可以包含Base64编码的PDF结果。保存结果后,它们将使用document.write写入页面。
function OCRToString(imageIndex) {
WebTWAIN.OCRLanguage = "eng";
WebTWAIN.OCRResultFormat = 0; // 文本
return WebTWAIN.OCREx(imageIndex);
}
var results = OCRToString(0); // UTF-8编码的OCR结果(与ascii兼容)
document.write(results);