首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我还能用什么其他诊断方法来解决这个特殊的Perl问题呢?

问我还能用什么其他诊断方法来解决这个特殊的Perl问题呢?
EN

Stack Overflow用户
提问于 2010-03-02 05:57:43
回答 1查看 319关注 0票数 3

经过大量的实验,我仍然不能让下面的脚本工作。我需要一些关于如何诊断这个特定Perl问题的指导。提前谢谢。

此脚本用于测试Office2007OCRAPI的使用:

代码语言:javascript
复制
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将错误抛出

代码语言:javascript
复制
Use of uninitialized value $OCRresult in print at E:\OCR-test.pl line 15

我怀疑这句话是不是出了问题

代码语言:javascript
复制
$miDoc->OCR(LangId => 'miLANG_ENGLISH'); 

我试着让父母空着,或者使用三个部分,比如“miLANG_ENGLISH”,“1,1”等等,但是没有任何运气。我还尝试使用Microsfot文档成像来测试我正在试验的TIF是否是文本可识别的,并且结果是肯定的。

我还有其他诊断方法吗?

或者,某个碰巧有Office 2007的人可以用任何有文本内容的jpg、bmp或tif图片测试我的代码,看看有什么问题吗?

提前谢谢。

更新

哈哈,我终于弄明白问题在哪里了,怎么解决的。@霍布斯,谢谢你的留言:)事情很有趣。当我试图回复你的评论时,我添加了Office文档成像2003 VBA语言参考网址的链接,然后再看一看那里的内容。以下信息吸引了我的眼球:

代码语言:javascript
复制
LangId can be one of the following MiLANGUAGES constants.
miLANG_CHINESE_SIMPLIFIED (2052, &H804)

我更改了以下OCR方法行:

代码语言:javascript
复制
$miDoc->OCR('miLANG_ENGLISH',1,1);

对此:

代码语言:javascript
复制
$miDoc->OCR(2052,1,1); 

注意: 1.我在Windows上运行ActivePerl 5.10.0 (中文版本) 2.在此之前,我已经尝试过$miDoc->(9),但没有成功

突然,奇怪的是,写着“在E:\OCR-test.pl第15行打印中使用未初始化的值$OCRresult”的讨厌的错误完全消失了,OCRed文本出现在屏幕上。OCR结果并不令人满意,但参数"2052“指的是中文,TIF图像中包含所有英文。因此,我将参数更改为$miDoc->OCR(9,1,1),但这次没有运气。Windows向我抛出了这个错误:

代码语言:javascript
复制
unknown software exception (0x0000000d)

我将TIF图像更改为包含所有汉字的TIF图像,并将参数更改为“$miDoc->OCR(2052,1,1)”,这一次一切都像预期的那样工作。OCR结果令人满意。

现在,我认为我的Office2007OCRAPI有点奇怪,如果有人碰巧运行了Windows (英文版)并安装了Office 2007,那么参数很可能不会出现异常错误。

代码语言:javascript
复制
$miDoc->OCR(9,1,1); 

不管怎么说,我真的很高兴我终于把事情做好了。

EN

回答 1

Stack Overflow用户

发布于 2010-03-02 10:45:05

首先,我会尝试转储$miDoc->{Images}的值--它存在吗?如果它存在并且它是一个集合,它包含任何东西吗?如果里面有什么,那是什么?一个错误?或者仅仅是一个与你预期不同的结构呢?warn,Dumper,和一些探索都可以帮上很大的忙。

顺便说一句,如果你想做“现代”的事情,并且不介意从CPAN上抓取一个漂亮的工具,那么试试Devel::Dwarn吧--它使向stderr倾倒比以前更有趣:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2361177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档