template php excel ms-word pdf-generation

template - php word to pdf



Convierte Word doc, docx y Excel xls, xlsx a PDF con PHP (10)

¿Has probado http://www.phpdocx.com/ ? Además, también se puede alojar en tu servidor.

Estoy buscando una forma de convertir archivos de Word y Excel a PDF usando PHP.

La razón de esto es que necesito poder combinar archivos de varios formatos en un solo documento. Sé que si puedo convertir todo a PDF, puedo fusionar los archivos PDF en un solo archivo usando PDFMerger (que usa fpdf).

Ya puedo crear archivos PDF desde otros tipos de archivos / imágenes, pero estoy atorado con Word Docs. (Creo que posiblemente podría convertir los archivos de Excel utilizando la biblioteca PHPExcel que ya uso para crear archivos de Excel a partir del código html).

No utilizo el Zend Framework, así que espero que alguien pueda orientarme en la dirección correcta.

Alternativamente, si hay una manera de crear archivos de imagen (jpg) a partir de los documentos de Word, eso sería factible.

¡Gracias por cualquier ayuda!


1) Estoy usando WAMP.

2) He instalado Open Office (desde apache http://www.openoffice.org/download/ ).

3) $output_dir = "C:/wamp/www/projectfolder/"; esta es mi carpeta de proyecto donde quiero crear un archivo de salida.

4) Ya he colocado mi archivo de entrada aquí C:/wamp/www/projectfolder/wordfile.docx";

Entonces ejecuto mi código ... (dado a continuación)

<?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)); //print_r($export_args); //Write out the PDF $oWriterDoc->storeToURL($output_url,$export_args); $oWriterDoc->close(true); } $output_dir = "C:/wamp/www/projectfolder/"; $doc_file = "C:/wamp/www/projectfolder/wordfile.docx"; $pdf_file = "outputfile_name.pdf"; $output_file = $output_dir . $pdf_file; $doc_file = "file:///" . $doc_file; $output_file = "file:///" . $output_file; word2pdf($doc_file,$output_file); ?>


Bueno, mis 2 centavos cuando se trata del tema word 2007 docx , word 97-2004 doc , pdf y todos los demás tipos de MS Office que desean ser "convertidos de y a z pero en realidad no quieren ser". En mi experiencia hasta ahora, no se puede confiar en la conversión con LibreOffice u OpenOffice. Aunque los documentos .doc tienden a tener un mejor soporte que el .docx de la palabra 2007. En general, es muy difícil convertir el .docx a .doc sin romper nada.

.docx también tiende a ser extremadamente útil para la creación de plantillas donde .doc no es para ser binario.

La conversión de .doc a PDF fue la mayor parte del tiempo bastante confiable. Si aún puede influir en el diseño o el contenido de la palabra documento, entonces esto podría ser satisfactorio, pero en mi situación los documentos fueron suministrados por empresas extranjeras, donde incluso después de generar las plantillas .docx , en algunos escenarios, el .docx generado tenía que ser ligeramente modificado con texto de suplemento antes de que se haya generado en un PDF.

BASADO EN WINDOWS!

Todo este contratiempo me hizo llegar a la conclusión de que el único método de conversión verdaderamente confiable que encontré fue utilizar la clase COM en PHP y dejar que la aplicación MS Word o Excel hiciera todo el trabajo por usted. Daré un ejemplo sobre la conversión de .docx a .doc y / o PDF. Si no tiene instalado MS Office, puede descargar una versión de trial de 60 días que le daría suficiente espacio para realizar pruebas.

la extensión COM.net está comentada por defecto en php.ini , simplemente busque la línea php_com_dotnet.dll y php_com_dotnet.dll como tal

extension=php_com_dotnet.dll

Reinicie el servidor web (IIS no es un pre, Apache funcionará igual de bien).

El siguiente código es una demostración de lo fácil que es.

$word = new COM("Word.Application") or die ("Could not initialise Object."); // set it to 1 to see the MS Word window (the actual opening of the document) $word->Visible = 0; // recommend to set to 0, disables alerts like "Do you want MS Word to be the default .. etc" $word->DisplayAlerts = 0; // open the word 2007-2013 document $word->Documents->Open(''yourdocument.docx''); // save it as word 2003 $word->ActiveDocument->SaveAs(''newdocument.doc''); // convert word 2007-2013 to PDF $word->ActiveDocument->ExportAsFixedFormat(''yourdocument.pdf'', 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false); // quit the Word process $word->Quit(false); // clean up unset($word);

Esto es solo una pequeña demostración. Solo puedo decir que, en lo que respecta a la conversión, esta era la única opción confiable que podía usar e incluso recomendar.


Encontré una solución a mi problema y después de una solicitud, la publicaré aquí para ayudar a otros. Disculpas si me perdí detalles, hace tiempo que trabajé en esta solución.

Lo primero que se requiere es instalar Openoffice.org en el servidor. Solicité a mi proveedor de hosting que instalara el RPM de la oficina abierta en mi VPS. Esto se puede hacer a través de WHM directamente.

Ahora que el servidor tiene la capacidad de manejar archivos de MS Office, puede convertir los archivos ejecutando instrucciones de línea de comandos a través de PHP. Para manejar esto, encontré PyODConverter : https://github.com/mirkonasato/pyodconverter

Creé un directorio en el servidor y coloqué el archivo python PyODConverter dentro de él. También creé un archivo de texto plano sobre la raíz web (lo llamé "adocpdf"), con las siguientes instrucciones de línea de comando:

directory=$1 filename=$2 extension=$3 SERVICE=''soffice'' if [ "`ps ax|grep -v grep|grep -c $SERVICE`" -lt 1 ]; then unset DISPLAY /usr/bin/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard & sleep 5s fi python /home/website/python/DocumentConverter.py /home/website/$directory$filename$extension /home/website/$directory$filename.pdf

Esto comprueba que las bibliotecas de openoffice.org se estén ejecutando y luego llama al script PyODConverter para procesar el archivo y generarlo como PDF. Las 3 variables en las primeras tres líneas se proporcionan cuando el script se ejecuta desde un archivo PHP. La demora ("sleep 5s") se utiliza para garantizar que openoffice.org tenga tiempo suficiente para iniciar si es necesario. Lo he usado durante meses y la brecha de 5 parece dar suficiente espacio para respirar.

El script creará una versión en PDF del documento en el mismo directorio que el original.

Finalmente, iniciando la conversión de un archivo de Word / Excel desde PHP (lo tengo dentro de una función que comprueba si el archivo con el que estamos tratando es un documento de Word / Excel) ...

//use openoffice.org $output = array(); $return_var = 0; exec("/opt/adocpdf {$directory} {$filename} {$extension}", $output, $return_var);

Esta función de PHP se llama una vez que el archivo de Word / Excel se ha cargado al servidor. Las 3 variables en la llamada exec () se relacionan directamente con el 3 al inicio del script de texto plano anterior. Tenga en cuenta que la variable $ directory no requiere barra diagonal inicial si el archivo para la conversión está dentro de la raíz web.

¡Vale eso es todo! Espero que esto sea útil para alguien y salvarles las dificultades y la curva de aprendizaje que enfrenté.


He encontrado alguna solución después de tanto googlear. También puede intentarlo si está cansado de buscar una buena solución.

Para uso común con SOAP API

Necesita nombre de usuario y contraseña para realizar una solicitud SOAP en https://www.livedocx.com

Realice el registro utilizando este https://www.livedocx.com/user/account_registration.aspx y siga los pasos correspondientes.

Use el código siguiente en su archivo .php.

ini_set (''soap.wsdl_cache_enabled'', 0); // you will get this username and pass while register define (''USERNAME'', ''Username''); define (''PASSWORD'', ''Password''); // SOAP WSDL endpoint define (''ENDPOINT'', ''https://api.livedocx.com/2.1/mailmerge.asmx?wsdl''); // Define timezone date_default_timezone_set(''Europe/Berlin''); $soap = new SoapClient(ENDPOINT); $soap->LogIn( array( ''username'' => USERNAME, ''password'' => PASSWORD ) ); $data = file_get_contents(''test.doc''); $soap->SetLocalTemplate( array( ''template'' => base64_encode($data), ''format'' => ''doc'' ) ); $soap->CreateDocument(); $result = $soap->RetrieveDocument( array( ''format'' => ''pdf'' ) ); $data = $result->RetrieveDocumentResult; file_put_contents(''tree.pdf'', base64_decode($data)); $soap->LogOut(); unset($soap);

Siga este enlace para más información http://www.phplivedocx.org/

Para Ubuntu

Se requiere la instalación de OpenOffice y Unoconv.

desde el símbolo del sistema

apt-get remove --purge unoconv git clone https://github.com/dagwieers/unoconv cd unoconv sudo make install

Ahora agregue el código siguiente en su script PHP y asegúrese de que el archivo sea ejecutable.

shell_exec(''/usr/bin/unoconv -f pdf folder/test.docx''); shell_exec(''/usr/bin/unoconv -f pdf folder/sachin.png'');

Espero que esta solución te ayude.


Las soluciones basadas en Open Office / LibreOffice harán un trabajo OK, pero no esperen que sus archivos PDF se asemejen a sus archivos fuente si se crearon en MS-Office. Un PDF que se ve al 90% como el original no se considera aceptable en muchos campos.

La única manera de asegurarse de que sus archivos PDF se vean exactamente como los originales es utilizar una solución que use las DLL oficiales de MS-Office bajo el capó. Si está ejecutando su solución de PHP en servidores que no están basados ​​en Windows, entonces requiere un servidor de Windows adicional. Esto puede ser sorprendente, pero si realmente le importa la apariencia de sus archivos PDF, es posible que no tenga una opción.

Eche un vistazo a esta publicación en el blog . Muestra cómo usar PHP para convertir archivos de MS-Office con un alto nivel de fidelidad.

Descargo de responsabilidad: escribí esta publicación en el blog y trabajé en un producto comercial relacionado, así que considéreme imparcial. Sin embargo, parece ser una gran solución para las personas PHP con las que trabajo.


Otra forma de hacerlo es usar directamente un parámetro en el comando libreoffice:

libreoffice --convert-to pdf /path/to/file.{doc,docx}


Para un PHP específico, puede probar PHPWord : esta biblioteca está escrita en PHP puro y proporciona un conjunto de clases para escribir y leer desde diferentes formatos de archivo de documentos (incluidos .doc y .docx). El principal inconveniente es que la calidad de los archivos convertidos puede ser bastante variable.

Alternativamente, si desea una opción de mayor calidad, puede usar una API de conversión de archivos como Zamzar . Puede usarlo para convertir una amplia gama de formatos de oficina (y otros) en PDF, y puede llamar desde cualquier plataforma (Windows, Linux, OS X, etc.).

El código PHP para convertir un archivo se vería así:

<?php $endpoint = "https://api.zamzar.com/v1/jobs"; $apiKey = "API_KEY"; $sourceFilePath = "/my.doc"; // Or docx/xls/xlsx etc $targetFormat = "pdf"; $postData = array( "source_file" => $sourceFile, "target_format" => $targetFormat ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $endpoint); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ''POST''); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, $apiKey . ":"); $body = curl_exec($ch); curl_close($ch); $response = json_decode($body, true); print_r($response); ?>

Descripción completa: soy el desarrollador principal de Zamzar API.


Paso 1. Instale "Apache_OpenOffice_4.1.2" en su sistema Paso 2. Descargue la librería "unoconv" de github o en cualquier otro lugar.

-> C: / Archivos de programa (x86) / OpenOffice 4 / program / python.exe = Ruta del directorio de instalación de open office

-> D: / wamp / www / doc_to_pdf / libobasis4.4-pyuno / unoconv = Ruta de la carpeta de la biblioteca

-> D: / wamp / www / doc_to_pdf / files / ''.$ pdf_File_name.'' = ruta y nombre de archivo de pdf

-> D: / wamp / www / doc_to_pdf / files / ''.$ doc_file_name = Ruta del archivo del documento.

Si no se creó el pdf que el último paso vaya a -> Panel de control / Todos los elementos del panel de control / Herramientas administrativas -> servicios-> busque "wampapache" -> haga clic derecho y haga clic en propiedad -> haga clic en la pestaña de inicio de sesión servicio para interactuar con el escritorio

Crea un archivo .php de muestra y pon el código debajo y ejecútalo en el servidor wamp o xampp

$result = exec(''"C:/Program Files (x86)/OpenOffice 4/program/python.exe" D:/wamp/www/doc_to_pdf/libobasis4.4-pyuno/unoconv -f pdf -o D:/wamp/www/doc_to_pdf/files/''.$pdf_File_name.'' D:/wamp/www/doc_to_pdf/files/''.$doc_file_name);

Este código funciona para mí en el sistema operativo Windows-8


Puse con éxito una versión portátil de libreoffice en el servidor web de mi servidor, al que llamo con PHP para hacer una conversión de línea de comando de .docx, etc. a PDF. sobre la marcha. No tengo derechos de administrador en el servidor web de mi servidor. Aquí está la publicación de mi blog de lo que hice:

http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx

¡Hurra! ¡Convierte directamente de .docx o .odt a .pdf usando PHP con LibreOffice (el sucesor de OpenOffice)!