【发布时间】:2010-03-02 05:57:43
【问题描述】:
经过大量实验,我仍然无法使以下脚本正常工作。我需要一些关于如何诊断这个特定 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 Language Reference 的网址链接,然后我又看了一眼那里的东西。以下信息引起了我的注意:
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)但是没有运气
突然,令人讨厌的错误说“使用未初始化的值 $OCRresult 在 E:\OCR-test.pl 第 15 行打印”完全消失了,屏幕上出现了 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
【问题讨论】: