Nasıl RTF, OpenOffice kullanarak benim PHP web sayfasından PDF dönüştürebilirim?

2 Cevap php

Benim işletim sistemi Windows XP, ve ben IIS 5.1 ve PHP 5.2.9 kullanıyorum. Ben OpenOffice kullanıyorsanız, bir PDF, RTF doc dönüştürmek için benim PHP sayfasından bir PHP komut dosyası çağırmak çalışıyorum. Ben komut satırından doğrudan çağırdığınızda komut gayet güzel çalışıyor, ama benim PHP web sayfasından başlattığı çalışma çok aynı komut alma herhangi bir başarı sahip değilim.

Ben PHP sayfasından komut çağırdığınızda, sayfa sonunda hata gösteren, asılı ve ben soffice.bin ve soffice.exe süreçleri benim IIS kullanıcı adı altında çalışan Görev Yöneticisi görebilirsiniz not ettik.

Bu hatadır:

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

Ben bu alanlarda benim IIS kullanıcının izinlerini çift kontrol ettik:

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

Her durumda, benim IIS kullanıcı bu izinleri vardır: Okuma ve Yürütme, Klasör İçeriğini Okuma. Ve her durumda izinleri dengelemek için kontrol hayır "denys" vardır. Ben de php kodu bulunduğu Web_Root klasör için IIS kullanıcı yazma izinleri verdi.

Bu dönüştürme işlevini çağırır WordToPDF php:

<?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);
?>

Bu WordToPdf.php olduğu:

<?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);
}
?>

Are there any problems with my permissions, or any additional areas where I need to check permissions for the IIS user? Does anyone have an idea why IIS failed to create the COM object, if not a permissions issue?

Teşekkürler!

2 Cevap

Yay!! Burada çalışan bir süper kandırılan Brainiac sayesinde, ben şimdi aslında İŞLERİ bir çözüm var! Ben daha önce yayınlanan tüm kodu unut, ben Artık bunun herhangi birini kullanarak değilim. Başkasının burada çalışacak ne IIS üzerinde PHP PDF word dokümanlar dönüştürmek gerekiyorsa:

1) Tabii, OpenOffice Kurulum

2) Go here:
http://www.artofsolving.com/opensource/pyodconverter, and download DocumentConverter.py

\ Program Files \ OpenOffice.org 3 \ program: aynı OpenOffice klasörde soffice.exe bulunduğu, muhtemelen C 3) Yer DocumentConverter.py

4) bir hizmet olarak OpenOffice başlayın:

a) komut satırından yapabilirsiniz:

soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -headless -norestore -nologo -nofirststartwizard

http://www.artofsolving.com/node/10: b) Ya da uygun parametreleri ile bir windows servisi olarak bu web sitesi ve kurulum OpenOffice yönergeleri izleyin

5) PHP itibaren bu komutu çalıştırın:

exec('python "C:\Program Files\OpenOffice.org 3\program\DocumentConverter.py" path_to_doc\test.doc path_to_output_pdf\test.pdf"');

Yay, ne bir temiz ve güzel bir çözüm!

Açık ofis masaüstü ile etkileşim ihtiyacı ve SERVICE_INTERACTIVE_PROCESS bayrağı olmadan bir servis tarafından çağrılan beri izin verilmez gibi geliyor.