我正在尝试准备一个Delphi项目。在这个项目中,我需要获取用户在Windows Word编辑器或Pdf编辑器中选择的单词。到目前为止,我已经看到了一些在Memo或Notbook中将单词放在光标下的示例,但是我需要在其他编辑器(例如MsWord或AdobePdf编辑器)中将单词放在光标下。
这对我使用D7和Word 2007有用:
procedure TForm1.GetSelectedText;
var
MSWord,
Selection,
SelectedText : OleVariant;
begin
try
MsWord := GetActiveOleObject('Word.Application');
except
try
MsWord := CreateOleObject('Word.Application');
MsWord.Visible := True;
except
Exception.Create('Error');
end;
end;
Selection := MSWord.Selection;
if not VarIsEmpty(Selection) then begin
SelectedText := Selection.Text;
Caption := SelectedText;
end;
end;
显然,如果您的代码中已有其他对象,则将上述内容重新编写为独立函数并传递对现有MSWord对象的引用将是微不足道的。
就像我在评论中说的那样,在Acrobat / Pdf中执行等效操作是一个不同的技术问题,需要使用自己的q。但是,经过调查,我认为没有直接的方法可以做到这一点。
如果将Acrobat类型库导入Delphi,并给其一个单位Acrobat_Tlb.Pas,则会看到它包含一个COM对象接口CAcroPDDoc。
您可以为Acrobat中当前活动的文档实例化该对象。但是,关于Acrobat的COM对象模型的一件奇怪的事情是*它没有提供对文档中文本内容(如果有)的任何有用访问。
但是,从CAcroPDDoc界面,可以通过使用对CAcroPDDoc.GetJSObject的调用来访问文档的Acrobat内部JavaScript对象。
一旦获得了对JS对象的引用,就可以进行非常有限的文本处理,尤其是有一种方法“ GetPageNthWord(Page,WordNum,StripWhiteSpace)”可以“执行其在锡罐上的说明”。就实现而言,这是我所掌握的(如果您想查看代码,请发布新问题)。
从那里,如果您有时间,有专门知识和有一定的爱好(我目前还没有),您显然可以检索表示屏幕上选择矩形的另一个JS对象,并通过某种方式将其与第N个不同单词的坐标进行比较GetPageNthWord,您可以识别选择了哪个。不是QED,ISTM。
所有这些都是足够的性能,如果只是我,我会告诉用户将所选内容复制到剪贴板,在剪贴板中可以轻松地从Delphi代码中进行选择。
* -有时与Acrobat自动化一起使用时,我会感觉到Adobe已竭尽所能,无法轻松获取.PDF文件中的文本。那是否与原始PDF最初被认为是只写介质的可能的伪造故事有关,以便可以保证可以将其放入领域并确保不能对其进行修改,所以我不知道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句