经过大量实验,我仍然无法使以下脚本正常工作。我需要一些关于如何诊断这个特定 Perl 问题的指导。提前致谢。
此脚本用于测试 Office 2007 OCR API 的使用:
use warnings;
use strict;
use Win32::OLE;
use Win32::OLE::Const;
Win32::OLE::Const->Load("Microsoft Office Document Imaging 12\.0 Type Library")
or
die "Cannot use the Office 2007 OCR API";
my $miDoc = Win32::OLE->new('MODI.Document')
or die "Cannot create a MODI object";
#Loads an existing TIFF file
$miDoc->Create('OCR-test.tif');
#Performs OCR with the OCR language set to English
$miDoc->OCR(LangId => 'miLANG_ENGLISH');
#Get the OCR result
my $OCRresult = $miDoc->{Images}->Item(0)->{Layout}{Text};
print $OCRresult;
我做了一个小测试。我加载了一个包含 OCR 信息的 .MDI 文件。我删除了 OCR 方法行并运行了脚本,得到了预期的“print $OCRresult”文本输出。但除此之外,Perl 会向我抛出错误说
Use of uninitialized value $OCRresult in print at E:\OCR-test.pl line 15
我怀疑线路有问题
$miDoc->OCR(LangId => 'miLANG_ENGLISH');
我尝试将括号留空或使用三个参数,例如 'miLANG_ENGLISH',1,1 等,但没有任何运气。我还尝试使用 Microsfot Office Document Imaging 来测试我正在试验的 TIF 是否可识别文本并且结果是肯定的。
那么我还有哪些其他诊断方法?
或者碰巧有 Office 2007 的人可以使用包含文本内容的任何 jpg、bmp 或 tif 图片来测试我的代码,看看是否有问题?
提前致谢。
更新
哈哈,我终于弄清楚问题出在哪里以及如何解决了。@hobbs,感谢您留下评论 :) 事情很有趣。当我试图回复您的评论时,我添加了Office Document Imaging 2003 VBA 语言参考的 url 链接,我又看了一眼那里的东西。以下信息引起了我的注意:
LangId can be one of the following MiLANGUAGES constants.
miLANG_CHINESE_SIMPLIFIED (2052, &H804)
我更改了以下 OCR 方法行:
$miDoc->OCR('miLANG_ENGLISH',1,1);
对此:
$miDoc->OCR(2052,1,1);
几点注意事项: 1. 我在 Windows XP(中文版)上运行 ActivePerl 5.10.0 2. 在此之前,我已经尝试过 $miDoc->(9) 但没有运气
突然而神奇地,那个讨厌的错误说“在 E:\OCR-test.pl 第 15 行打印使用未初始化的值 $OCRresult”完全消失了,屏幕上出现了 OCRed 文本。OCR结果不满意,但参数“2052”指的是中文,TIF图像包含全英文。所以我将参数更改为 $miDoc->OCR(9,1,1) 但这次没有运气。Windows 向我抛出了这个错误:
unknown software exception (0x0000000d)
我把TIF图片改成全中文的,参数改成“$miDoc->OCR(2052,1,1);” 又一次,这一次一切都像预期的那样工作。OCR 结果令人满意。
现在我认为我的 Office 2007 OCR API 有点奇怪,如果碰巧运行 Windows XP(英文版)并安装了 Office 2007 的人可能不会遇到带有参数的异常错误
$miDoc->OCR(9,1,1);
无论如何,我真的很高兴我终于让事情正常了:D