uses
ComObj;
function ConvertDoc2Rtf(var FileName: string) : Boolean;
var
oWord: OleVariant;
oDoc: OleVariant;
begin
Result := False;
try
oWord := GetActiveOleObject('Word.Application');
except
oWord := CreateOleObject('Word.Application');
end;
oWord.Documents.Open(FileName);
oDoc := oWord.ActiveDocument;
FileName := ChangeFileExt(FileName, '.rtf');
oDoc.SaveAs(FileName);
oWord.ActiveDocument.Close(wdDoNotSaveChanges, EmptyParam, EmptyParam);
oWord.Quit(EmptyParam, EmptyParam, EmptyParam);
oDoc := VarNull;
oWord := VarNull;
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
FileName = 'c:\Document.doc';
beginif ConvertDoc2Rtf(FileName) thenbegin
ShowMessage('Word document has been converted to .rtf');
RichEdit1.Lines.LoadFromFile(FileName);
end;
end;
Программа на Delphi использует объект автоматизации Microsoft Word для конвертации файла Word (.doc) в файл RTF.
Следующий шаг:
Функция ConvertDoc2Rtf принимает имя файла как входной параметр и пытается открыть соответствующий файл Word с помощью метода GetActiveOleObject или CreateOleObject.
Если файл успешно открыт, программа сохраняет документ в файл RTF с помощью метода SaveAs и затем закрывает приложение Word с помощью метода Quit.
Функция возвращает булевое значение, указывающее, была ли конвертация успешной.
В обработчике события Button1Click формы (TForm1) программа вызывает функцию ConvertDoc2Rtf с конкретным именем файла ('c:\Document.doc') и отображает сообщение, если конвертация была успешной, а затем загружает конвертированный файл RTF в RichEdit-контроль (RichEdit1).
Альтернативное решение, не использующее автоматизацию Microsoft Word:
Вместо использования Word для конвертации документа можно использовать третьестороннюю библиотеку,such as SynEdit или ASync Procedures, для чтения и записи файла Word напрямую.
Пример с использованием SynEdit:
usessynedit;functionConvertDoc2Rtf(constFileName:string):Boolean;varDoc:TSynEditDocument;Stream:TStream;beginResult:=False;tryDoc:=TSynEditDocument.Create(nil);Stream:=TFileStream.Create(FileName,fmOpenRead);tryDoc.LoadFromStream(Stream);FileName:=ChangeFileExt(FileName,'.rtf');Stream:=TFileStream.Create(FileName,fmCreate);tryDoc.SaveToStream(Stream);Result:=True;finallyFreeAndNil(Stream);end;finallyFreeAndNil(Stream);FreeAndNil(Doc);end;except// обработка исключенияend;end;procedureTForm1.Button1Click(Sender:TObject);constFileName='c:\Document.doc';beginifConvertDoc2Rtf(FileName)thenbeginShowMessage('Word документ был конвертирован в .rtf');RichEdit1.Lines.LoadFromFile(FileName);end;end;
В этом коде используется библиотека SynEdit для чтения и записи файлов Word (.doc). Он загружает файл .doc в объект TSynEditDocument, а затем сохраняет его как файл RTF. Это решение не требует установки Microsoft Word на систему.
Обратите внимание, что это только простой пример и может не работать для всех случаев. Для более сложных конвертаций может потребоваться мощная библиотека или сервис.
Статья описывает программный код на языке Delphi, который позволяет сохранять файлы Word в формате RTF с помощью класса OleVariant и компонента Word.Application.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.