Wie konvertiere ich RTF in PDF von meiner PHP-Webseite mit OpenOffice?

Mein Betriebssystem ist Windows XP und ich verwende IIS 5.1 und PHP 5.2.9. Ich versuche, ein PHP-Skript von meiner PHP-Seite aus aufzurufen, um ein RTF-Dokument mit OpenOffice in ein PDF-Dokument zu konvertieren. Das Skript funktioniert einwandfrei, wenn ich es direkt von der Befehlszeile aus aufrufe, aber es gelingt mir nicht, das gleiche Skript zum Laufen zu bringen, wenn ich es von meiner PHP-Webseite aus starte.

Wenn ich das Skript von meiner PHP-Seite aus aufrufe, bleibt die Seite hängen und zeigt irgendwann einen Fehler an. Ich habe festgestellt, dass im Task-Manager angezeigt wird, wo die Prozesse soffice.bin und soffice.exe unter meinem IIS-Benutzernamen ausgeführt werden.

Das ist der Fehler:

<code>Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `com.sun.star.ServiceManager': Server execution failed ' in C:\WEB_ROOT\SoftwareContract\WordToPdf.php:14 Stack trace: #0 C:\WEB_ROOT\SoftwareContract\WordToPdf.php(14): com->com('com.sun.star.Se...') #1 C:\WEB_ROOT\SoftwareContract\Index.php(11): word2pdf('file:///C:/web_...', 'file:///C:/web_...') #2 {main} thrown in C:\WEB_ROOT\SoftwareContract\WordToPdf.php on line 14
</code>

Ich habe die Berechtigungen für meinen IIS-Benutzer in den folgenden Bereichen überprüft:

<code>C:\PHP
C:\Program Files\OpenOffice.org 3
C:\Program Files\Java
C:\WEB_ROOT ---- location for my php code
</code>

In jedem Fall verfügt mein IIS-Benutzer über die folgenden Berechtigungen: Lesen und Ausführen, Ordnerinhalt auflisten, Lesen. Und in jedem Fall gibt es keine "Verweigerungen", um die Berechtigungen auszugleichen. Ich habe dem IIS-Benutzer auch Schreibrechte für den Ordner Web_Root erteilt, in dem sich der PHP-Code befindet.

Dies ist das PHP, das die Konvertierungsfunktion WordToPdf aufruft:

<code><?php
require_once('WordToPdf.php');

$output_dir = 'C:/web_root/softwarecontract/';
$doc_file = 'C:/web_root/softwarecontract/testdoc.rtf';
$pdf_file = 'output.pdf';
$output_file = $output_dir . $pdf_file;
$doc_file = "file:///" . $doc_file;
$output_file = "file:///" . $output_file;
word2pdf($doc_file,$output_file);
?>
</code>

Und das ist WordToPdf.php:

<code><?php
set_time_limit(0);
function MakePropertyValue($name,$value,$osm)
{
    $oStruct = $osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    $oStruct->Name = $name;
    $oStruct->Value = $value;
    return $oStruct;
}
function word2pdf($doc_url, $output_url)
{
    //Invoke the OpenOffice.org service manager
    $osm = new COM("com.sun.star.ServiceManager") or die ("Please be sure that OpenOffice.org is installed.\n");
    //Set the application to remain hidden to avoid flashing the document onscreen
    $args = array(MakePropertyValue("Hidden",true,$osm));
    //Launch the desktop 
    $oDesktop = $osm->createInstance("com.sun.star.frame.Desktop");
    //Load the .doc file, and pass in the "Hidden" property from above
    $oWriterDoc = $oDesktop->loadComponentFromURL($doc_url,"_blank", 0, $args);
    //Set up the arguments for the PDF output
    $export_args = array(MakePropertyValue("FilterName","writer_pdf_Export",$osm));
    //Write out the PDF
    $oWriterDoc->storeToURL($output_url,$export_args);
    $oWriterDoc->close(true);
}
?>
</code>

Gibt es Probleme mit meinen Berechtigungen oder zusätzlichen Bereichen, in denen ich Berechtigungen für den IIS-Benutzer überprüfen muss? Hat jemand eine Idee, warum IIS das COM-Objekt nicht erstellt hat, wenn keine Berechtigungsprobleme vorliegen?

Vielen Dank!!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage