Crear word rtf con php
En algunos de los proyectos que he realizado se ha presentado el caso de exportar información de una base de datos a un documento word, usando una plantilla predeterminada. Se puede realizar mediante la clase PHPDOCX, tiene dos versiones libre y de pago, le versión libre no tiene todas las funcionalidades como para resolver el problema que indico, asi que tuve que exportar los datos en un archivo .rtf dado que desde word se puede abrir, editar este tipo de archivos. Buscando en la web encontre algunos ejemplos, pero yo le di un poco de mi cosecha, la clase se llama ToRtf.
Primero deberan crear una plantilla de nombre plantilla.rtf con el diseño predeterminado.
Luego crean el archivo ToRtf.php y copian el código
<?php class ToRtf { public $fichero;//-- fichero de origen public $fsalida;//-- nombre del nuevo fichero public $dirsalida;//-- directorio del nuevo fichero public $retorno;//-- fichero (retorna el fichero modo descarga)| nombre (retorna el nombre del fichero) public $prefijo;//-- prefijo del nuevo fichero public $valores;//-- valores a reemplazar public $error;//-- retorna los errores function __construct () {//-- CARGAMOS VALORES POR DEFECTO $this->fichero ='plantilla.rtf'; $this->fsalida ='new.rtf'; $this->dirsalida =''; $this->retorno = 'fichero'; $this->prefijo = date('dmYHis'); $this->valores = array(); $this->error = ''; } function leerArchivo() {//-- CARGAMOS EL FICHERO EN UNA VARIABLE if(is_file($this->fichero)){ $texto = file($this->fichero); $ntexto = sizeof($texto); $todo =''; for($n=0;$n<$ntexto;$n++) { $todo = $todo.$texto[$n]; } return $todo; }else{ $this->error = 'Archivo de Origen no existe'; return false; } } function rtf(){ $this->fsalida = $this->prefijo.$this->fsalida;//-- DEFINIMOS EL NOMBRE DEL NUEVO FICHERO if($txtplantilla = $this->leerArchivo()){//-- COMPROBAMOS SI SE CARGO BIEN EL FICHERO $punt = fopen($this->dirsalida.$this->fsalida,"w");//-- CREAMOS EL NUEVO FICHERO if(is_array($this->valores) and count($this->valores)>0){ foreach($this->valores as $k=>$v){//-- REEMPLAZAMOS LAS VARIABLES $v = utf8_decode($v); $txtplantilla = str_replace($k,$v,$txtplantilla); } } fputs($punt,$txtplantilla);//-- AGREGAMOS EL CONTENIDO AL NUEVO FICHERO fclose($punt);//- CERRAMOS LA CONEXION DEL FICHERO if($this->retorno=="fichero"){//-- RETORNA EN MODO DE DESCARGA header ("Content-Disposition: attachment; filename=".$this->fsalida."\n\n"); header ("Content-Type: application/octet-stream"); readfile($this->dirsalida.$this->fsalida); }elseif($this->retorno=="nombre"){//-- RETORNA EL NOMBRE DEL FICHERO return $this->fsalida; } } } } ?> |
Lo ejecutamos
<?php require('ToRtf.php'); $f = new ToRtf(); $f->fichero = 'plantilla.rtf'; $f->fsalida = 'nuevo.rtf'; $f->dirsalida = ''; $f->retorno = 'fichero'; $f->prefijo = 'pre_'; $f->valores = array( '#*DIRECCION*#' => "Av. Los Alamos 150", '#*CIUDAD*#' => "Lima", '#*NOMBRE*#' => "El Guille", '#*NOMBREDESTINO*#' => "A TI", '#*FECHA*#' => date('d/m/Y'), '#*EMPRESA*#' => "SOLUCIONES S.A.C.", '#*PUESTO*#' => "Administrador", '#*DIRECCIONDESTINO*#' => "Av. Los Nogales 200", '#*CIUDADDESTINO*#' => "Callao", ); $f->rtf(); ?> |
Como verán #*NOMBRE*# funciona como un marcador que se buscara y se reemplazara por el valor que se le asigne, esto es a través de un arreglo que lo pueden crear después de hacer una consulta a la base de datos y devolviendo la información que desean exportar.
Bueno eso es todo por hoy, me voy a dormir, si tienen dudas no dejen de comentar.
Repositorio en GitHub
Pueden visitar el repositorio en GitHub.
Descargarlo directamente DESCARGAR AQUÍ.
Actualizado 12 Setiembre 2016.
hola! pregunta: como hago para ejecutar el script? porque lo prueba y no pasa nada. soy nuevo en esto de aplicar clases.
Primero tienes que crear tu plantilla asi como aparce en la imagen y lo guardas como plantilla.rtf, luego creas un archivo y lo llamas ToRtf.php, estos dos archivos deben encontrarse en el mismo directorio del servidor, luego en el archivo ToRtf.php pegas los dos trozos de códigos. Y finalmente lo ejecutas, debe descargarse un nuevo archivo con los datos cambiados.
Para ejecutar una clase, primero tienes que instanciarla, como esta en la primera linea del segundo código, luego las demas son para actualizar las variables y la última linea genera el archivo, y devuelve el nombre del nuevo archivo.
Espero haber resuelto tus dudas. Saludos.
excelente info!
lo probé y me funciona pero solo me toma el primer marcador… el resto no me salen los datos, que pensas que puede estar pasando? yo tome la información de una base de datos.
te paso mi código a ver si me podes ayudar.
no se copio todo… te paso el codigo por aca: http://carloschirinos.com.ar/codigo.txt
Borre el código porque se veia mal, he revisado el código que me enviaste, habia un error, que era al final: $domiclio debe ser $domicilio.
Pero ademas no se porque cuando modificas en la plantilla el valor #*valor*# y luego prueba no lo reemplaza, pero cuando borras todo #*valor*# y luego vuelves a escribir #*valor*# ahi si funciona.
tenes razón, ahí me funciono. gracias!
pero ahora tengo un problema… cuando en un formulario escribo palabras con acento en el word sale símbolos raros… ejemplo: publicación => p?cion
tenes idea cual seria la solución?
Eso es por el tipo de codificación del texto, prueba antes de hacer el reemplazo al word, usa la función utf8_decode ó utf8_encode , con esto debe verse bien las tildes o eñes.
es que suspuestamente ese reemplazo ya esta:
if(is_array($this->valores) and count($this->valores)>0){
foreach($this->valores as $k=>$v){//– REEMPLAZAMOS LAS VARIABLES
$v = utf8_decode($v);
$txtplantilla = str_replace($k,$v,$txtplantilla);
}
}
pero aun asi no pasa naranja. yo sigo buscando y probando…. si se te ocurre algo avisame. gracias!
bueno entonces intenta de 3 modos, con utf8_decode, utf8_encode o sin ninguno de ellos es decir comenta la linea $v = utf8_decode($v);
Una de ellas debe funcionar.
hola, excelente trabajo.
Podrías poner un ejemplo de como sacar los datos de una BD MySQL
o directamente de un formulario?
Tengo un formulario hecho en breezingforms pero no consigo enlazar los datos introducidos en los campos del formulario para que aparezcan en este archivo.
Un saludo.
Si queréis más flexibilidad para generar documentos de Word con PHP podéis probar PHPDocX.
Hola buenas tardes yo tengo un sistema que genera documentos apartir de un rtf, pero el problema que tengo es que en word no visualizo las tablas que genera, en la vista preliminar que es pdf si aparecen las tablas pero al generar el word no me genera la tabla solo visualiza el contendio de la misma pero lo pone en lineas de texto, como puedo hacer que me permita ver las tablas, de ante mano agradezco mucho tu ayuda.
Hola Janette, para ayudarte tendria que ver algo de código de como se genera el rtf. Saludos.
Te comento que lo direcciono a una plantilla y este es parte del codigo ya que genero oficios, memorandum, notas informativas y circulares.
//$plantilla=”Plantillas/plantillaCircular.rtf”;
$cont_ = stripslashes($array[“9”]);
$cont_ = str_replace(”, ”, $cont_);
$cont_ = str_replace(”, ”, $cont_);
$cont_ = str_replace(”, ”, $cont_);
$plantilla =’
‘.$array[“0”].”.$array[“1”].’CIRCULAR NÚM. “’.$siglasHeredadas.$array[“2”].’”ASUNTO: ‘.$array[“4”].”.$array[“5”].’
‘.$array[“6”].’
‘;
if($Titulo_ != “”)
{
$plantilla = $plantilla.’‘.$Titulo_.’ ‘.$array[“7”].’‘;
}
else
{
$plantilla = $plantilla.’‘.$array[“7”].’‘;
}
$plantilla = $plantilla.’
‘.$array[“8”].’
PRESENTES
‘.$cont_.’
ATENTAMENTE
‘.$Titulo_rem.’ ‘.$array[“12”].’
‘.$array[“11”].’
‘.$array[“13”].”.$array[“14”].’
‘.$array[“15”].’/’.$array[“16”].’/’.$array[“17”].’.
‘;
$TipoDoc = “La circular “;
if($borrador == “on”)
{
$si_borrador_nompdf = “_Borrador”.$Consecu_borrador;
}
else
{
$si_borrador_nompdf = “”;
}
$dpdf = new HTML2FPDF(); // Instanciamos la Clase
$dpdf->AddPage(); // Le Entregamos la Variable
$dpdf->WriteHTML($plantilla); // Mandamos el Fichero
$fsalida = “../Documentos$Anio/$siglasUA/$DirTipoDoc/$NombreArchivo”.$si_borrador_nompdf.”.pdf”;
$dpdf->Output($fsalida);
//echo $fsalida;
}
Genera dos archivos en pdf si visualizo la tabla pero en word lo pone como texto sin formato
Muchas gracias
Hola Janette, he reducido el código para crear tabla con en rtf:
{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fswiss\fprq2\fcharset0 Calibri;}{\f2\fnil\fcharset0 Calibri;}}
\trowd \brdrs \brdrs \brdrs
\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx1620\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx3349\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx5078\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx8536\pard COLUMNA 1\cell COLUMNA 2\cell COLUMNA 3\cell COLUMNA 4\cell
\row
\trowd \brdrs \brdrs \brdrs
\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx1620\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx3349\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx5078\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx8536\pard COLUMNA 1\cell COLUMNA 2\cell COLUMNA 3\cell COLUMNA 4\cell
\row
}
Con este código podrias generar tus tablas, si lo habres con word se ve los bordes de las tablas. Inicio y fin de una fila (\trowd … \row), \brdrs es para el borde.
Más información de los códigos lo encuentras aquí
Muchas gracias por el codigo, estoy checandolo ya que lo inserte y no visulizo nada aun.
te recomiendo que lo pruebes con un script separado y luego ya lo agregas a tu proyecto.
Buenos Días,
He probado tu ejemplo, y al ver el documento generado veo el código RTF, pero no el documento RTF en si mismo:
Notice: Undefined variable: todo in C:\xampp\htdocs\tasa\ToRtf.php on line 29
…
Hola Luis, si habia un pequeño error que ya ha sido corregida.
Te comento que lo direcciono a una plantilla y este es parte del codigo ya que genero oficios, memorandum, notas informativas y circulares.
//$plantilla=”Plantillas/plantillaCircular.rtf”;
$cont_ = stripslashes($array[“9″]);
$cont_ = str_replace(”, ”, $cont_);
$cont_ = str_replace(”, ”, $cont_);
$cont_ = str_replace(”, ”, $cont_);
$plantilla =’
‘.$array[“0″].”.$array[“1”].’CIRCULAR NÚM. "’.$siglasHeredadas.$array[“2”].’"ASUNTO: ‘.$array[“4″].”.$array[“5”].’
‘.$array[“6”].’
‘;
if($Titulo_ != “”)
{
$plantilla = $plantilla.’‘.$Titulo_.’ ‘.$array[“7”].’‘;
}
else
{
$plantilla = $plantilla.’‘.$array[“7”].’‘;
}
$plantilla = $plantilla.’
‘.$array[“8”].’
PRESENTES
‘.$cont_.’
ATENTAMENTE
‘.$Titulo_rem.’ ‘.$array[“12”].’
‘.$array[“11”].’
‘.$array[“13″].”.$array[“14”].’
‘.$array[“15”].’/’.$array[“16”].’/’.$array[“17”].’.
‘;
$TipoDoc = “La circular “;
if($borrador == “on”)
{
$si_borrador_nompdf = “_Borrador”.$Consecu_borrador;
}
else
{
$si_borrador_nompdf = “”;
}
$dpdf = new HTML2FPDF(); // Instanciamos la Clase
$dpdf->AddPage(); // Le Entregamos la Variable
$dpdf->WriteHTML($plantilla); // Mandamos el Fichero
$fsalida = “../Documentos$Anio/$siglasUA/$DirTipoDoc/$NombreArchivo”.$si_borrador_nompdf.”.pdf”;
$dpdf->Output($fsalida);
//echo $fsalida;
}
Genera dos archivos en pdf si visualizo la tabla pero en word lo pone como texto sin formato
Muchas gracias
/* //– FUNCIONES PARA CREACION DE DOCUMENTO RTF */
function leef($fichero)
{
$texto= file($fichero);
$tamleef = sizeof($texto);
for ($n=0; $n’, $contenido);
$contenido=str_replace(‘<‘,'<', $contenido);
$contenido=str_replace('µ','µ', $contenido);
$contenido=str_replace('·','•', $contenido);
$contenido=str_replace('¶','¶', $contenido);
$contenido=str_replace('±','±', $contenido);
$contenido=str_replace('€','€', $contenido);
$contenido=str_replace('£','£', $contenido);
$contenido=str_replace('®','®', $contenido);
$contenido=str_replace('§','§', $contenido);
$contenido=str_replace('¥','¥', $contenido);
$contenido=str_replace('á','á', $contenido);
$contenido=str_replace('Á','Á', $contenido);
$contenido=str_replace('à','à', $contenido);
$contenido=str_replace('À','À', $contenido);
$contenido=str_replace('â','â', $contenido);
$contenido=str_replace('Â','Â', $contenido);
$contenido=str_replace('å','å', $contenido);
$contenido=str_replace('Å','Å', $contenido);
$contenido=str_replace('ã','ã', $contenido);
$contenido=str_replace('Ã','Ã', $contenido);
$contenido=str_replace('ä','ä', $contenido);
$contenido=str_replace('Ä','Ä', $contenido);
$contenido=str_replace('æ','æ', $contenido);
$contenido=str_replace('Æ','Æ', $contenido);
$contenido=str_replace('ç','ç', $contenido);
$contenido=str_replace('Ç','Ç', $contenido);
$contenido=str_replace('é','é', $contenido);
$contenido=str_replace('É','É', $contenido);
$contenido=str_replace('è','è', $contenido);
$contenido=str_replace('È','È', $contenido);
$contenido=str_replace('ê','ê', $contenido);
$contenido=str_replace('Ê','Ê', $contenido);
$contenido=str_replace('ë','ë', $contenido);
$contenido=str_replace('Ë','Ë', $contenido);
$contenido=str_replace('í','í', $contenido);
$contenido=str_replace('Í','Í', $contenido);
$contenido=str_replace('ì','ì', $contenido);
$contenido=str_replace('Ì','Ì', $contenido);
$contenido=str_replace('î','î', $contenido);
$contenido=str_replace('Î','Î', $contenido);
$contenido=str_replace('ï','ï', $contenido);
$contenido=str_replace('Ï','Ï', $contenido);
$contenido=str_replace('ñ','ñ', $contenido);
$contenido=str_replace('Ñ','Ñ', $contenido);
$contenido=str_replace('ó','ó', $contenido);
$contenido=str_replace('Ó','Ó', $contenido);
$contenido=str_replace('ò','ò', $contenido);
$contenido=str_replace('Ò','Ò', $contenido);
$contenido=str_replace('ô','ô', $contenido);
$contenido=str_replace('Ô','Ô', $contenido);
$contenido=str_replace('ø','ø', $contenido);
$contenido=str_replace('Ø','Ø', $contenido);
$contenido=str_replace('õ','õ', $contenido);
$contenido=str_replace('Õ','Õ', $contenido);
$contenido=str_replace('ö','ö', $contenido);
$contenido=str_replace('Ö','Ö', $contenido);
$contenido=str_replace('ß','ß', $contenido);
$contenido=str_replace('ú','ú', $contenido);
$contenido=str_replace('Ú','Ú', $contenido);
$contenido=str_replace('ù','ù', $contenido);
$contenido=str_replace('Ù','Ù', $contenido);
$contenido=str_replace('û','û', $contenido);
$contenido=str_replace('Û','Û', $contenido);
$contenido=str_replace('ü','ü', $contenido);
$contenido=str_replace('Ü','Ü', $contenido);
$contenido=str_replace('ÿ','ÿ', $contenido);
$contenido=str_replace('°','°', $contenido);
return $contenido;
}
/*
espero que les sirva A mi me salia un error a la hora de guardar el documento, abría el documento descargado y me salia un montón de letras y el error con la variable $todo … de inicializacion, lo que hice es mas arriba al empezar la función es esto: $todo=””, en otras palabras iniciarla y me funciono xD
pequeño aporte pero es para que no estén dando vueltas… 🙂
Hola Miguel el pequeño error ya lo he corregido, gracias por el dato.
Saludos.
xD tengo otro dato 🙂 necesitan hacer una tabla en el rtf que generan, para evitarles la travesía que hice yo xD la solución es crear el codio de la tabla en rtf y alojarlo en una variable, por cierto a esta variable que crean tambien deben inicializarla por seacaso, y luego la pasan a la clase como si fuera otro dato a reemplazar.
Espero que les sirva, espero haberlos ayudado 🙂
Haber si compartes el código de crear tabla en rtf, ya he separado el código de la tabla en rtf, bueno son las primaeras pruebas:
{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fswiss\fprq2\fcharset0 Calibri;}{\f2\fnil\fcharset0 Calibri;}}
\trowd \brdrs \brdrs \brdrs
\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx1620\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx3349\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx5078\clcbpat2\clbrdrl\brdrs\clbrdrt\brdrs\clbrdrr\brdrs\clbrdrb\brdrs
\cellx8536\pard COLUMNA 1\cell COLUMNA 2\cell COLUMNA 3\cell COLUMNA 4\cell
\row
}
Muchas gracias por la clase me sirvió muchisimo
Muchas gracias por compartir!!
Gracias por el datos esta muy bueno tu aporte, una pregunta, como haria para que el documento que genera, pueda descargarlo pero que no se guarde en el directorio web
Pues tienes que agregarle esta opción
$f->retorno = 'fichero';
Buenos dias.. quisiera saber si hay forma de evitar que se descargue el archivo generado o siempre se descargara ?
Si pones
$f->retorno = 'nombre';
retornará solo el nombre del archivo creado.Hola quisiera saber como puedo hacer un SALTO DE PÁGINA el archivo rtf
Abriendo un archivo .rtf con un editor de texto como sublime text y agregando las lineas:
\par \page
texto a ingresar
Pero si deseas algo más avanzado podrías utilizar https://github.com/PHPOffice/PHPWord
Buen dia. muchisimas gracias por el aporte, muy bueno. pero tu podrias ayudarme a insertar valores en rtf a partir de datos guardados en una base de datos, te lo agradeceria infinitamente
Te recomiendo que veas este ejemplo http://php.net/manual/es/mysql.examples-basic.php modificas el código y aplicas la clase ToRtf.
muchas gracias por el link
Hola quisiera que me ayuden como haría para insertar una imagen dentro de este documento
Para hacer algo más avanzado deberias usar PHPRtfLite.
Crear archivos Word RTF con PHPRtfLite
Buenas tardes, ante todo gracias por tu tutorial. El problema que me surge es que al ejecutar el script me descarga el archivo y al abrirlo me sale la venta de la codificación y me salen caracteres raros. Un saludo, espero tu contestación y gracias de antemano
Muestra el error o el código que sale.
Gracias por contestar! No es un error. Es decir ejecuto el script, se descarga el archivo y al abrir el pre_nuevo.rtf se me abre el word pero me sale la ventana de “Seleccione la codificación con la que se puede leer el documento. Codificación texto: Windows(predeterminado) ms-dos, Otra codificacion….” etc
No se si con esta explicación sabes de que ventana hablo.
Si envias una captura de pantalla de esa ventana?
Hola, muy excelente su aporte. Mi inquietud es sobre la generacion del archivo: copié exactamente tanto la plantilla rtf como el archivo php, pero cuando ya quiero generar me sale una cantidad de codigos de error que empieza asi:
Warning: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. in C:\AppServ\www\-FORMATO CONSEC\ToRtf.php on line 18
Warning: date(): It is not safe to rely on the system’s timezone ………..
Y siguen y siguen. ¿Acaso me hizo falta agregar algo o quitar algo más?¿Me podrías colaborar?
De antemano gracias
Ese error es porque no has configurado la zona horaria en el php.ini, agrega al inicio del archivo la función y cambia la ciudad a la que perteneces.
date_default_timezone_set('America/Los_Angeles');
Más información
Otra opción es modificar el php.ini
date.timezone = "America/Los_Angeles"
Y reinicia el apache.
Eres un genio jajaja. Muchas Gracias
Ahora surgió otro inconveniente. Cuando quiero descargar el documento me salen 2 copias, pero al enlace que quiero direccionar la descarga me sale con caracteres extraños, mientras que la plantilla correcta se guarda en la carpeta donde estan los archivos php para crear dichos archivos. No se si me hice entender, pero alguien que entienda este problema o haya pasado por lo mismo me puede ayudar por favor.
Gracias
Tendría que ver el código o el error para poder ayudarte.
Hola, gracias por compartir tu informacion. Tengo un pregunta. Sucede que intento modificar online los datos a llenar en la plantilla pero aunque ya diseñe el formulario, cuando se descarga el archivo .docx, al intentar abrirlo, si se han llenado los datos, pero mesale el error de archivo dañado; reitero que si salen los datos llenos, pero tengo q pasar por este odioso mensaje de error.
Hay alguna posibilidad de que se omita este error?
gracias
Muestra el error.
Hola Guillermo:
He copiado tal cual tienes el codigo en mi servidor “ya que es justo lo que necesito, pero primero lo pruebo y luego lo modifico”. En la carpeta del servidor tengo ToRtf.php, userToRtf.php y plantilla.rtf, tal cual me lo he descargado de Github. Cuando ejecuto userToRtf.php en el navegador, me descarga el documento pre_nuevo.rtf, no me genera ningun error, pero al abrir el documento, este esta en blanco. Los codigos aunque son exactos son:
ToRtf.php:
fichero =’plantilla.rtf’;
$this->fsalida =’new.rtf’;
$this->dirsalida =”;
$this->retorno = ‘fichero’;
$this->prefijo = date(‘dmYHis’);
$this->valores = array();
$this->error = ”;
}
function leerArchivo()
{//– CARGAMOS EL FICHERO EN UNA VARIABLE
if(is_file($this->fichero)){
$texto = file($this->fichero);
$ntexto = sizeof($texto);
$todo =”;
for($n=0;$nerror = ‘Archivo de Origen no existe’;
return false;
}
}
function rtf(){
$this->fsalida = $this->prefijo.$this->fsalida;//– DEFINIMOS EL NOMBRE DEL NUEVO FICHERO
if($txtplantilla = $this->leerArchivo()){//– COMPROBAMOS SI SE CARGO BIEN EL FICHERO
$punt = fopen($this->dirsalida.$this->fsalida,”w”);//– CREAMOS EL NUEVO FICHERO
if(is_array($this->valores) and count($this->valores)>0){
foreach($this->valores as $k=>$v){//– REEMPLAZAMOS LAS VARIABLES
$v = utf8_decode($v);
$txtplantilla = str_replace($k,$v,$txtplantilla);
}
}
fputs($punt,$txtplantilla);//– AGREGAMOS EL CONTENIDO AL NUEVO FICHERO
fclose($punt);//- CERRAMOS LA CONEXION DEL FICHERO
if($this->retorno==”fichero”){//– RETORNA EN MODO DE DESCARGA
header (“Content-Disposition: attachment; filename=”.$this->fsalida.”\n\n”);
header (“Content-Type: application/octet-stream”);
readfile($this->dirsalida.$this->fsalida);
}elseif($this->retorno==”nombre”){//– RETORNA EL NOMBRE DEL FICHERO
return $this->fsalida;
}
}
}
}
?>
userToRtf.php:
fichero = ‘plantilla.rtf’;
$f->fsalida = ‘nuevo.rtf’;
$f->dirsalida = ”;
$f->retorno = ‘fichero’;
$f->prefijo = ‘pre_’;
$f->valores = array(
‘#*DIRECCION*#’ => “Av. Los Alamos 150”,
‘#*CIUDAD*#’ => “Lima”,
‘#*NOMBRE*#’ => “El Guille”,
‘#*NOMBREDESTINO*#’ => “A TI”,
‘#*FECHA*#’ => date(‘d/m/Y’),
‘#*EMPRESA*#’ => “SOLUCIONES S.A.C.”,
‘#*PUESTO*#’ => “Administrador”,
‘#*DIRECCIONDESTINO*#’ => “Av. Los Nogales 200”,
‘#*CIUDADDESTINO*#’ => “Callao”,
);
$f->rtf();
?>
y en el directorio del servidor solo están esos tres archivos.
Cual puede ser el problema?
Muchas gracias por el aporte y sobre todo por tu atencion.
Revisa que las variables esten escrito correctamente en un editor de texto.
Habilita los errores del php
Hola alguien podría ayudarme por favor!!
¿como agrego una imagen al la plantilla?
Si vas usar imagen creo que lo más fácil es usar PHPRtfLite
Ok. Muchas gracias guillermo. Hoy habilito los mensaje de error, lo pruebo y te comento.
Mil gracias por tu ayuda y perdona por contestar tarde.
Un saludo
Comprobado. Ese ha sido mi error.
Mil gracias por tu ayuda, te debo una.
Un saludo
Hola, tengo un problema, no me cambia todos los marcadores, y los tengo exactamente iguales en el código y en la plantilla.rtf:
$f->valores = array(
‘#*lineap*#’ => $r1,
‘#*LINEAS*#’ => $r2,
‘#*LINEAT*#’ => $r3,
‘#*DIRECCION*#’ => $row[“direccion”],
‘#*CIUDAD*#’ => “Lima”,
‘#*HAS*#’ => $row[“predio”],
‘#*NOMBRE*#’ => $row[‘nombrecompleto’],
‘#*FECHA*#’ => date(“d/m/Y”),
‘#*contrato*#’ => “X1X2X3”,
‘#*ENGANCHE*#’ => $enganche,
‘#*EIMPOLET*#’ => $LengancheL,
‘#*colindancias*#’ => $row[“colindancias”],
‘#*IMPORTE*#’ => number_format($row[“prestamo”],2),
‘#*IMPORTELETRA*#’ => $numeroL,
‘#*MENS*#’ => $numMens,
);
En mis pruebas, algunos los saco de una tabla de MySQL, lo cual hace bien, pero por ejemplo, el marcador #*LINEAT*# el cual también tengo en mi plantilla.rtf no lo cambia, lo deja tal cual, y pasa en uno o dos casos…
Gracias de antemano.
Ernesto.