加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

从Delphi创建Word文档,另存为Doc和PDF

发布时间:2020-12-15 09:24:38 所属栏目:大数据 来源:网络整理
导读:我需要使用特定模板从Delphi创建Word文档,将文档保存为具有给定名称的Word文档,然后使用相同的名称保存相同的文档,但保存为PDF文件. (在Word 2007中,可以使用SaveAsPdf …插件完成.在Word 2010中,它是内置功能) 如何使用Delphi XE完成这项工作? 解决方法 首
我需要使用特定模板从Delphi创建Word文档,将文档保存为具有给定名称的Word文档,然后使用相同的名称保存相同的文档,但保存为PDF文件. (在Word 2007中,可以使用SaveAsPdf …插件完成.在Word 2010中,它是内置功能)

如何使用Delphi XE完成这项工作?

解决方法

首先使用组件|将“Microsoft Word 12对象”(MS Word 2007)类型库导入到项目中“导入组件”菜单项.然后,您可以使用此示例代码加载MS Word文件,并使用内部PDF转换器将其另存为PDF.如果您使用的是Microsoft Word 2010,请加载其类型库而不是Word 2007.

unit fMain;

interface

uses
  Windows,SysUtils,Variants,Classes,Controls,Forms,Dialogs,StdCtrls,Word_TLB;

type
  TfrmMain = class(TForm)
    btnLoad: TButton;
    btnSaveAs: TButton;
    FileOpenDialog1: TFileOpenDialog;
    FileSaveDialog1: TFileSaveDialog;
    procedure btnLoadClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnSaveAsClick(Sender: TObject);
  private
    FWordApp : WordApplication;
    FWordDoc : WordDocument;
    procedure InitializeApp;
    procedure FinalizeApp;
    function LoadFile(const AFileName: string): WordDocument;
    procedure SaveAsPdf(ADocument: WordDocument; const AFileName: string);
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

uses ComObj;

{$R *.dfm}

procedure TfrmMain.btnLoadClick(Sender: TObject);
begin
  if FileOpenDialog1.Execute then
    FWordDoc := LoadFile(FileOpenDialog1.FileName);
end;

procedure TfrmMain.btnSaveAsClick(Sender: TObject);
begin
  if FileSaveDialog1.Execute then
  begin
    if Assigned(FWordDoc) then
      SaveAsPdf(FWordDoc,FileSaveDialog1.FileName);
  end;
end;

procedure TfrmMain.FinalizeApp;
var
  SaveChanges: OleVariant;
begin
  if Assigned(FWordApp) then
  begin
    SaveChanges := False;
    FWordApp.Quit(SaveChanges,EmptyParam,EmptyParam);
    FWordApp := nil;
  end;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FinalizeApp;
end;

procedure TfrmMain.InitializeApp;
begin
  FWordApp := createOleObject('Word.Application') as WordApplication;
  if Assigned(FWordApp) then
  begin
    FWordApp.Visible := False;
  end
  else
    raise Exception.Create('Cannot initialize Word application');
end;

function TfrmMain.LoadFile(const AFileName: string): WordDocument;
var
  FileName: OleVariant;
  Doc : WordDocument;
begin
  if not Assigned(FWordApp) then
    InitializeApp;

  FileName := AFileName;
  Doc := FWordApp.Documents.Open(FileName,EmptyParam);
  Result := Doc;
end;

procedure TfrmMain.SaveAsPdf(ADocument: WordDocument; const AFileName: string);
var
  FileName,FileFormat : OleVariant;
begin
  if Assigned(ADocument) then
  begin
    FileName := AFileName;
    FileFormat := wdFormatPDF;
    ADocument.SaveAs(FileName,FileFormat,EmptyParam);
  end;
end;

end.

我只是编写了代码并运行了一次,它可以工作,但我没有彻底测试它,所以可能会有一些故障.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读