¿Cómo convierto RTF a PDF desde mi página web de PHP usando OpenOffice?

Mi sistema operativo es Windows XP, y estoy usando IIS 5.1 y PHP 5.2.9. Estoy tratando de llamar a un script PHP desde mi página PHP para convertir un documento RTF a un PDF, usando OpenOffice. El script funciona bien cuando lo llamo directamente desde la línea de comandos, pero no estoy teniendo ningún éxito al hacer que el mismo script funcione cuando se inicie desde mi página web de PHP.

Cuando llamo al script desde mi página de PHP, la página se cuelga, finalmente muestra un error, y he notado que puedo ver en el Administrador de tareas donde se ejecutan los procesos soffice.bin y soffice.exe con mi nombre de usuario IIS.

Este es el error:

<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>

He revisado los permisos para mi usuario de IIS en estas áreas:

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

En cada caso, mi usuario de IIS tiene estos permisos: Leer y ejecutar, Mostrar contenido de la carpeta, Leer. Y en cada caso no hay "denys" marcados para compensar los permisos. También le di al usuario de IIS permisos de escritura para la carpeta Web_Root donde reside el código php.

Este es el php que llama a la función de conversión, WordToPdf:

<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>

Y esto es 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>

¿Hay algún problema con mis permisos o áreas adicionales en las que necesito verificar los permisos para el usuario de IIS? ¿Alguien tiene una idea de por qué IIS no pudo crear el objeto COM, si no es un problema de permisos?

¡¡Gracias!!

Respuestas a la pregunta(2)

Su respuesta a la pregunta