entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Crear Word con texto enriquecido

hola a todos, tengo un proyecto donde el usuario guarda unas instrucciones en un textarea el cual le puse un componente de texto enriquecido, hasta aquí todo va súper, en la base de datos se guardar con código html, lo cuál esta bien, mi dolor de cabeza es el siguiente, necesito pasar esa información a un archivo de word, y no encuentro mucha información para hacerlo, estoy trabajando con php y la libreria phpWord, había encontrado una manera muy fácil con una plantilla pero el problema es que con las variables que están con el texto enriquecido, truena y me marca error al abrir el word y no me trae el valor de las variables con html

<?php

if(!isset($_SESSION)) 
{ 
    session_start(); 
}
if($_SESSION['login']!=1)
{
    header("Location: login.php");
    exit;
}
include ("connection/connection.php");
$signum= $_SESSION['signum'];
$id1= filter_input(INPUT_POST, "idmop");

$sql="SELECT * FROM MOPS.dbo.users WHERE signum='".$signum."'";
$rs=odbc_exec($connection,$sql);

$nameMop="SELECT * FROM MOPS.dbo.create_Name WHERE name='".$id1."'";
$rsname=odbc_exec($connection,$nameMop);

$sql2="SELECT * FROM MOPS.dbo.createmop WHERE idmop='".$id1."'";
$rs2=odbc_exec($connection,$sql2);

require_once dirname(__FILE__).'/PHPWord/src/PhpWord/Autoloader.php';
\PhpOffice\PhpWord\Autoloader::register();

use PhpOffice\PhpWord\TemplateProcessor;

$templateWord = new TemplateProcessor('plantilla.docx');

$name = odbc_result($rsname,"name");
$region = odbc_result($rsname,"regionb");
$country = odbc_result($rsname,"countryb");
$servicearea = odbc_result($rsname,"serviceAreab");
$domain = odbc_result($rsname,"domainServiceAreab");
$technologyType = odbc_result($rsname,"technologyTypeb");
$technologyTypeService = odbc_result($rsname,"technologyTypeSRb");
$customer = odbc_result($rsname,"customerb");
$projectDescription = odbc_result($rs2,"projectdescription");
$serviceImpact = odbc_result($rs2,"serviceimpact");
/*$activityApprovals = odbc_result($rs,"activityAprobals");
$escalationProcedure = odbc_result($rs,"escalationProcedure");
$escalationPath = odbc_result($rs,"escalationPath");
$requiredDocuments = odbc_result($rs,"requiredDocuments");
$rollbackCriteria = odbc_result($rs,"rollbackCriteria");
*/

// --- Asignamos valores a la plantilla
$templateWord->setValue('signum',$signum);
$templateWord->setValue('name',$name);
$templateWord->setValue('region',$region);
$templateWord->setValue('country',$country);
$templateWord->setValue('servicearea',$servicearea);
$templateWord->setValue('domain',$domain);
$templateWord->setValue('technologyType',$technologyType);
$templateWord->setValue('technologyTypeService',$technologyTypeService);
$templateWord->setValue('customer',$customer);
$templateWord->setValue('Project_Description',$projectDescription);
$templateWord->setValue('Service_Impact',$serviceImpact);
// --- Guardamos el documento
$templateWord->saveAs('Documento02.rft');

header("Content-Disposition: attachment; filename=Documento02.rtf; charset=iso-8859-1");
echo file_get_contents('Documento02.docx');

?>

ojala que alguien con un poquito mas de experiencia en este tema me pueda ayudar

0voto

Leonardo-Tadei comentado

Qué error te da?

Podrías acotar en qué linea es que se produce el error?

0voto

rach comentado

hola @Leonardo-Tadei me da error el documento de word al abrirlo, me sale vacio

0voto

ninamejia comentado

Hola @rach
Tengo la misma duda de escribir en word texto enriquecido, quisiera saber si pudiste solucionar???

0voto

rach comentado

hola, @ninamejia ya no seguí intentando de esta forma, lo que ocupe y me funcionó fue con la libreria DOMPDF conseguí generar un pdf y de esta forma me salian los datos con el texto enriquecido sin problema, si te sirve y te puedo ayudar, con todo gusto!
SAludos

0voto

ninamejia comentado

@rach Muchas gracias por contestar tan rápido, la verdad no me lo esperaba.

Te comento estoy desarrollando una aplicación para generar documentación y esta tiene varias platillas predeterminadas.

Disculpa si mi pregunta es boba..

con la librería DOMPDF se puede utilizar una plantilla???

0voto

rach comentado

hola de nuevo, no que yo sepa, yo en realidad lo que hago es pasar los valores a un formato html que se vea bonito, digamos que yo creo la plantilla y solo le mando los valores que necesito con php, (esta libreria es de php)

1 Respuesta

1voto

Leonardo-Tadei Puntos227320

Hola Rach,

en el código, lo estás guardando como Documento02.rft:

...
$templateWord->saveAs('Documento02.rft');
...

pero al querer enviarlo al browser lo estás buscando como Documento02.docx

...
echo file_get_contents('Documento02.docx');
...

que no existe, y por eso la descarga está vacía.

Usá en ambos lugares el mismo nombre de archivo!

Saludos cordiales.

0voto

rach comentado

hola @Leonardo-Tadei ya le cambie eso y me sigue saliendo lo mismo :(

me gustaría que si alguien sabe como generar documentos word desde base de datos lo pudiera compartir, como repito tengo mis datos guardados con codigo html :(

ayuda !!

1voto

Leonardo-Tadei comentado

Es que estás mezclando 3 cosas independientes una de otra en tu pregunta:

1) un documento de MS Word podría mostrar sin problemas etiquetas HTML sin formatearlas, es decir, si tenés:

<p>hola mundo</p>

se verá eso en el documento.

2) a la biblioteca le da lo mismo que los datos vengan de una DB o los escribas a mano, por lo que podrías hacer una prueba de generar el documento escribiendo constantes en los valores y viendo si se genera correctamente, sin ninguna conexión a la DB.

3) no podemos verificar tus querys sin los datos ni tu entorno de trabajo. Podrías probar si se muestran por pantalla los valores que estás consultando sin generar el documento de MS Word, para ver que esa parte funcione bien.

Probá estas 3 cosas por separado y fijate cuál te está fallando... tal vez te estés rompiendo la cabeza con la biblioteca cuando no estás obteniendo los valores correctamente de la DB, por citar un ejemplo.

Saludos!

0voto

rach comentado

hola @Leonardo-Tadei muchas gracias por responder, de hecho lo primero que hice antes de publicar mi pregunta fue eso, probé que se imprimiera la variable tal cual copie el query e imprimi el valor y me lo trajo sin las etiquetas html

  1. en mi bd tengo una tabla donde los textos que ponen son sin etiquetas html y estos funcionan perfecto y no manda ningún error el word, pero no pasa lo mismo cuando mando llamar los que si tienen etiquetas html

entonces supongo que algo pasa con estos que tienen etiquetas, y la verdad me urge que se genere mi word porq al igual hay veces que pueden poner imagenes en un texto y esos no se como mandarlos llamar :S necesito que me lea ese html como lo hace mi sistema en una vista previa que tengo tal cual que se pase asi al word

1voto

Leonardo-Tadei comentado

Hola @rach,

MS Word no sabe interpretar etiquetas HTML. Para ver texto con formato, tenés que formatearlo con la sintaxis de ese formato de documento.

Hay algunas bilbiotecas que toman HTML, lo interpretan ellas y lo pasan a otros formatos. He usado alguna que convertía un subconjunto de etiquetas HTML a formato PDF.

Revisá en la documentación de esa biblioteca si tiene alguna forma de interpretar HTML, o en caso contrario, fijate cómo formatea texto y hacé vos las conversiones.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta