WordXP Delphi命令无法保存为PDF

时间:2015-04-03 16:48:20

标签: delphi pdf automation save-as

我有一个应用程序在保存为.doc文件时工作正常。 我已经尝试了它,所以程序将保存为.doc和.pdf,这是使用WordXP单元完成的。

procedure TDocCreator.CloseDocument(ASaveAs : string);
var
  LFileName : OleVariant;
begin
  LFileName := ASaveAs;
  FDoc.SaveAs(LFileName, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
     EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  LFileName := ChangeFileExt(ASaveAs, '.pdf');
  FDoc.SaveAs(LFileName,PDFFileFormat,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
     EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  FWordApp.NormalTemplate.Saved := true;
  FWordApp.Quit(True);
  FWordApp.Disconnect;
end; 

如果我删除第二个saveas代码工作正常。每次保存文档时都不会弹出“EOleException Command Failed”异常,但发生中断的时间点是SaveAs用于.pdf文件的时间。

注意我只有2个保存程序可用SaveAs(上面使用)和SaveAs2000。我也远离一台可以编译delphi的机器。

如果我遗漏了任何内容或需要清除任何内容,我将能够回复,但是我将无法在周二之前测试任何代码更改。

谢谢。

编辑: 好的,该程序正在远程调试(所有代码都无法访问办公室的机器,因为它在VM上)。一旦完成保存过程,应用程序将通过一组模板进行mailmerged。所以我做了2个文件(这个过程在for循环中完成)。这很好。然后我尝试在第三个文件上执行5,它提出了“命令失败”错误。然后不会关闭单词并取消剩余的进程。在查看LFileName时,其内容为'???'。这有时是外国人。虽然它仍然设法使用正确的filenam创建.doc文件。如果这与“ASaveAs”有任何区别,则在程序之外设置此文件名。另一件事是该文件没有使用任何其他应用程序打开。它使用程序打开的单词application完成整个过程。

1 个答案:

答案 0 :(得分:0)

  LFileName := ASaveAs;
  try
    try
      FDoc.SaveAs(LFileName,EmptyParam, EmptyParam, EmptyParam, ...);
    except
      on E : Exception do
        ShowMessage(E.ClassName + ' error creating document');
    end;
    try
      if FileExists(LFileName) then
      begin
        Sleep(5000);
        LFileName := ChangeFileExt(ASaveAs, '.pdf');
        FDoc.SaveAs(LFileName,PDFFileFormat,EmptyParam, EmptyParam, ...;
      end;
    except
      on E : Exception do
        ShowMessage(E.ClassName + ' error creating PDF');
    end;
  finally
    FWordApp.Quit(True);
    FWordApp.Disconnect;
  end;

可能会更好,我仍然不确定尝试和除了但它的工作没有崩溃,由于战术睡眠。可能会更好,并希望它,但现在这似乎是一个很好的解决方案。感谢David Heffernan指出该文件可能正在使用中。