0

我正在使用德尔福东京 10.2。我有以下功能:

function THtmlToPdfService.ExecuteShell(filename, outFilename : string) : Boolean;
var
  shellInfo : TShellExecuteInfo;
  exitCode : DWORD;
begin
  Result := false;
  try
    // Set Shell execution information
    FillChar(shellInfo, SizeOf(shellInfo), 0);
    shellInfo.cbSize := SizeOf(TShellExecuteInfo);
    shellInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
    shellInfo.Wnd := 0;
    shellInfo.lpFile := PChar(GetHtmlDocInstallDirectory + 'htmldoc.exe');
    shellInfo.lpParameters := PChar(Format(' --webpage --datadir ' +
      GetHtmlDocInstallDirectory + ' -f %s %s', [outFilename, filename]));
    shellInfo.nShow := SW_HIDE;

    // Run ShellExecuteEx to wait for process to complete
    if ShellExecuteEx(@shellInfo) then
    begin
      repeat
        Application.ProcessMessages;
        GetExitCodeProcess(shellInfo.hProcess, exitCode) ;
      until (exitCode <> STILL_ACTIVE);

      if FileExists(outFilename) then
        Result := true
      else
        RaiseLastOSError;
    end;
  except
    raise;
  end;
end;

这非常简单地执行 HTMLDoc.exe,使用文件名作为源 HTML 文件,使用 outFilename 作为目标输出 PDF 文件。我在我的本地主机上运行的 Isapi DLL 和 CGI​​ EXE 中使用了相同的单元。我有一个本地测试 exe,它从我的 localhost 调用 Web 服务,当我调用 Isapi 服务时,它工作得很好……输出 PDF 被创建,调用这个的函数将该 PDF 返回给用户一个字节数组。当我从同一个测试模块调用 CGI 服务时,它不会创建输出 PDF,它只是返回:

System Error.  Code: 2.  The system cannot find the file specified

其他一切都很好,但它不会创建我需要的输出文件。我尝试过权限、身份验证,我尝试过不同的文件格式设置方法,我什至尝试先创建 PDF,希望这只是文件已经存在的问题,即使这对 Isapi 无关紧要服务。我已经验证了 HTMLDoc 和源文件都可以在此命令执行时找到,如果我首先创建 PDF,服务会将空白 PDF 返回给用户,但我需要 HTML 文件在 CGI 中正确转换。有什么想法吗?

4

0 回答 0