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 ファイルが必要です。何かご意見は?