Saltar al contenido

Convierta Word doc, docx y Excel xls, xlsx a PDF con PHP

Este dilema se puede resolver de diversas maneras, pero nosotros te compartimos la resolución más completa para nosotros.

Solución:

Encontré una solución a mi problema y después de una solicitud, la publicaré aquí para ayudar a otros. Disculpas si me perdí algún detalle, ha pasado un tiempo desde que trabajé en esta solución.

Lo primero que se requiere es instalar openoffice.org en el servidor Solicité a mi proveedor de alojamiento que instalara el RPM de 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 comando a través de PHP. Para manejar esto, encontré Convertidor PyOD: 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 sin formato 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 verifica 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. El retraso (“sleep 5s”) se utiliza para garantizar que openoffice.org tenga suficiente tiempo para iniciarse si es necesario. He usado esto durante meses y la brecha de 5s parece dar suficiente espacio para respirar.

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

Por último, iniciar la conversión de un archivo de Word/Excel desde dentro de PHP (lo tengo dentro de una función que verifica si el archivo 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 en el servidor. Las 3 variables en la llamada exec() se relacionan directamente con las 3 al comienzo del script de texto sin formato anterior. Tenga en cuenta que la variable $directory no requiere una 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 les ahorre las dificultades y la curva de aprendizaje que enfrenté.

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

.docx también tienden a ser extremadamente útiles para crear plantillas donde .doc no es por ser binario.

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


BASADO EN WINDOWS!

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

la extensión COM.net está comentada de forma predeterminada en el php.inisolo busque la línea php_com_dotnet.dll y descoméntalo así

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

Esta es solo una pequeña demostración. Solo puedo decir que si se trata de conversión, esta fue la única opción realmente confiable que pude usar e incluso recomendar.

1) Estoy usando WAMP.

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

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

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

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

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

valoraciones y reseñas

Si haces scroll puedes encontrar las ilustraciones de otros usuarios, tú también eres capaz mostrar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *