0

Delphi Tokyo 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;

これは、非常に単純に、ファイル名をソース HTML ファイルとして使用し、outFilename をターゲット出力 PDF ファイルとして使用して、HTMLDoc.exe を実行します。Isapi DLL と CGI EXE の両方で同じユニットを使用し、ローカルホストで実行しています。ローカルホストから Web サービスを呼び出すローカル テスト exe があります。Isapi サービスを呼び出すと、問題なく動作します...出力 PDF が作成され、これを呼び出す関数がその PDF を次のようにユーザーに返します。バイト配列。同じテスト モジュールから CGI サービスを呼び出すと、出力 PDF は作成されず、次のように返されます。

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

他のすべては問題なく動作しますが、必要な出力ファイルが作成されません。アクセス許可、認証、ファイルをフォーマットするさまざまな方法を試しました。最初に PDF を作成することさえ試みました。これは、Isapi にとっては問題ではありませんが、ファイルが既にそこにあるという単純な問題であることを望んでいました。サービス。このコマンドを実行した時点で HTMLDoc とソース ファイルの両方が見つかることを確認しました。最初に PDF を作成すると、サービスは空白の PDF をユーザーに返しますが、CGI で適切に変換するには HTML ファイルが必要です。何かご意見は?

4

0 に答える 0