1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| unit MSWord2MHT;
// модуль преобразования doc совместимых форматов в MHT
interface
uses
SysUtils, Windows, ActiveX, ComObj, Classes, Variants;
const
mswordOpenDialogTypes = 'MS Word Files|*.doc;*.docx;*.txt;*.rtf';
function IsOLEObjectInstalled(Name: String): boolean;
function GetOleObject(name:string):variant;
function WordToMHT(const msdocfile, mhtfile: string):boolean;
implementation
function IsOLEObjectInstalled(Name: String): boolean;
var
ClassID: TCLSID;
Rez : HRESULT;
begin
// Ищем CLSID OLE-объекта
Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);
if Rez = S_OK then // Объект найден
Result := true
else
Result := false;
end;
function GetOleObject(name:string):variant;
begin
result:=null;
if IsOLEObjectInstalled(name) then begin
try
result:=GetActiveOleObject(name); // пытаемся найти запущенный объект
exit;
except
result := CreateOleObject(name);
end;
end else begin
raise Exception.Create('Интерфейс '+name+' не обнаружен в системе');
Abort;
end;
end;
function WordToMHT(const msdocfile, mhtfile: string):boolean;
var w, doc : variant; i: integer; ok: boolean;
begin
result:=false;
w:=GetOleObject('Word.Application');
ok:=false;
for i:=1 to w.Documents.Count do begin
doc:=w.Documents.item(i);
if AnsiUpperCase(doc.fullname) = AnsiUpperCase(msdocfile) then begin
ok:=true;
break;
end;
end;
if not ok then begin
// открываем новый документ
w.ChangeFileOpenDirectory(ExtractFilePath(msdocfile));
doc:=w.Documents.Open(
FileName:=ExtractFileName(msdocfile),
ConfirmConversions:=False,
ReadOnly:=true,
AddToRecentFiles:=False,
PasswordDocument:='',
PasswordTemplate:='',
Revert:=False,
WritePasswordDocument:='',
WritePasswordTemplate:='',
Format:=0, //auto
XMLTransform:=''
);
end;
// документ получен, сохраняем данные в MHT
doc.SaveAs2(
FileName:=mhtfile, FileFormat:= 9, {mht = 9 }
LockComments:=False, Password:='', AddToRecentFiles:=False,
WritePassword:='', ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False,
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:=False,
CompatibilityMode:=0
);
// закрываем документ
doc.close;
// если документов больше нет отключаем Word
if w.documents.count = 0 then w.quit;
result:=true;
end;
end. |