Foros del Web » Programando para Internet » PHP »

Generar documentos de Word RTF en php

Estas en el tema de Generar documentos de Word RTF en php en el foro de PHP en Foros del Web. Hola a todos! Me gustaría saber cómo se puede generar un documento de Word RTF en php cuyo contenido sea el que está almacenadoen una ...

  #1 (permalink)  
Antiguo 23/10/2005, 03:42
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Generar documentos de Word RTF en php

Hola a todos!

Me gustaría saber cómo se puede generar un documento de Word RTF en php cuyo contenido sea el que está almacenadoen una base de datos.Espero que alguien me pueda ayudar.Gracias por adelantado

Saludos
  #2 (permalink)  
Antiguo 23/10/2005, 10:57
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 18 años, 11 meses
Puntos: 0
Hola

Espero te sirva, yo lo solucione con este codigo que me pasaron aquí es:

<?
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=NOMBRE DE TU ARCHIVO.doc o .rtf");
?>

Lo que pongas en ese php te lo bajará como word o rtf, segun le pongas.

Saludos.
  #3 (permalink)  
Antiguo 23/10/2005, 11:51
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Gracias dulce Alejandra,pero lo que realmente me interesa es el código que le sigue a eso que me has puesto porque la función header() ya la he puesto.Podrias pasarmelo??

Gracias de antemano
  #4 (permalink)  
Antiguo 04/11/2005, 12:47
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 19
simple ... hace esto ...
Código PHP:
<? 
header
("Content-Description: File Transfer"); 
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=NOMBRE DE TU ARCHIVO.doc o .rtf"); 
echo 
"Esto seria el contenido de tu documento .doc o .rtf";
$i 0;
while(
$i 10){
     echo 
"la variable i tiene el valor : ".$i;
     
$i++;
}
//a modo de ejemplo !!!saludos!!!
?>
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #5 (permalink)  
Antiguo 04/11/2005, 15:30
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Es fabuloso

Me gustó mucho ese código, lo probé y de maravilla lo hace.

Lo único que no sé hacer es poner saltos de línea, ¿no sabes de casualidad?

Gracias !
  #6 (permalink)  
Antiguo 04/11/2005, 15:37
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
Muy sencillo. Tan sólo tienes que incluir estos caracteres \r\n al final de cada línea:

Código PHP:
<? 
header
("Content-Description: File Transfer"); 
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=NOMBRE DE TU ARCHIVO.doc o .rtf"); 
echo 
"Esto seria el contenido de tu documento .doc o .rtf";
$i 0;
while(
$i 10){
     echo 
"la variable i tiene el valor : ".$i."\r\n";
     
$i++;
}
//a modo de ejemplo !!!saludos!!!
?>
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #7 (permalink)  
Antiguo 04/11/2005, 15:46
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Hola!

Pero por qué cuando hago eso me sale código rtf??

Esto es lo que me sale:

{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshf loch0\stshfhich0\stshfbi0\deflang3082\deflangfe308 2{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f37\froman\fcharset238\fprq2 Times New Roman CE;} {\f38\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f40\froman\fcharset161\fprq2 Times New Roman Greek;}{\f41\froman\fcharset162\fprq2 Times New Roman Tur;}{\f42\froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\f43\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f44\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f45\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0 \green0\blue255;\red0\green255\blue255; \red0\green255\blue0;\red255\green0\blue255;\red25 5\green0\blue0;\red255\green255\blue0;\red255\gree n255\blue255;\red0\green0\blue128;\red0\green128\b lue128;\red0\green128\blue0;\red128\green0\blue128 ;\red128\green0\blue0;\red128\green128\blue0;

Saludos
  #8 (permalink)  
Antiguo 04/11/2005, 15:53
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
Pero eso donde te sale, en el navegador o en el word?
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #9 (permalink)  
Antiguo 04/11/2005, 15:55
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Thanks !

Pues sí que es sencillo.

Este código me resuelve media vida, lo bueno de este código + mi DB es que podré hacer documentos mega-personalizados que se pueden descargar p' imprimirse luego.

Sabía que se podían hacer en PDF, pero muchas personas prefieren Word y RTF. No está de más poner las dos opciones y que el cliente se descargue que gusten.

Parece magia, k', jeje.

Thanks compa.
  #10 (permalink)  
Antiguo 04/11/2005, 16:12
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
En el Word,despues de que salga la típica ventanita preguntando:¿Desea abrir,guardar o cancelar el documento??

Muchas gracias por la ayuda que me estas prestando
  #11 (permalink)  
Antiguo 04/11/2005, 16:28
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
Cita:
Iniciado por robandrox
En el Word,despues de que salga la típica ventanita preguntando:¿Desea abrir,guardar o cancelar el documento??

Muchas gracias por la ayuda que me estas prestando
Que versión de word estás utilizando??
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #12 (permalink)  
Antiguo 04/11/2005, 16:42
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
ûes tengo Word 2003.
  #13 (permalink)  
Antiguo 04/11/2005, 16:50
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
Que extraño, yo uso la misma versión de Word y no tengo ese problema. Podrías poner el código que estás usando exactamente?
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #14 (permalink)  
Antiguo 04/11/2005, 16:58
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Aqui te paso el script que estoy utilizando:

Código PHP:
<?php

$name
=$_POST['name'];
$score=$_POST['score'];


//Comprobamos que disponemos de los parámetros necesarios

if(!$name || !$score)
{
    echo 
"<h2>Error:</h2>Esta página fue llamada incorrectamente<br>";
}else{

    
//Generamos los encabezados para que el navegador seleccione la aplicación correcta


    
header('Content-type: application/msword');
    
header('Content-Disposition: inline; filename=cert.rtf');

    

    
//Abrimos el archivo de plantilla

    
$filename="PHPCertification.rtf";
    
$output=file_get_contents($filename);

    
//Sustituimos los marcadores de posición en la plantilla por los datos

    
$output=str_replace('<<NAME>>'strtoupper($name), $output);
    
$output=str_replace('<<Name>>',$name,$output);
    
$output=str_replace('<<score>>',$score,$output);
    
    
//Enviamos el documento generado al navegador
    
echo $output;
}

?>
Las variables $name y $score las vienen de un formulario.
Tiene algun fallo el codigo??
Me puedes pasar exactamente tu script que le heche un vistazo para comparar con el mio
Gracias
  #15 (permalink)  
Antiguo 04/11/2005, 16:59
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Perdon,que le eche un vistazo(sin h,je je je je)
  #16 (permalink)  
Antiguo 04/11/2005, 17:17
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
El problema está aquí:

Código PHP:
$filename="PHPCertification.rtf"
    
$output=file_get_contents($filename); 
Ese fichero lo habrás creado con word y este último mete diversos "tags" para el formato del fichero. Ese es el código que sale cuando abres el rtf generado por php.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #17 (permalink)  
Antiguo 04/11/2005, 17:21
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Entonces,como podria solucionarlo si lo que quiero es introducir datos que tengo en una base de datos??.Realmente no quiero leer nada del fichero(porque yo no quiero una plantilla);"fle_get_contents" lo he puesto porque me venia ya en un ejemplo que pillé en un libro

¿Llegaré a solucionar mi problema??Mision imposible!!
  #18 (permalink)  
Antiguo 04/11/2005, 17:31
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
Más arriba te han puesto un ejemplo:
Código PHP:
<? 
header
("Content-Description: File Transfer"); 
header("Content-Type: application/force-download"); 
header("Content-Disposition: attachment; filename=NOMBRE DE TU ARCHIVO.doc o .rtf"); 
echo 
"Esto seria el contenido de tu documento .doc o .rtf"
$i 0
while(
$i 10){ 
     echo 
"la variable i tiene el valor : ".$i."\r\n"
     
$i++; 

//a modo de ejemplo !!!saludos!!! 
?>
La diferencia que en vez de poner ese texto tendrás que ir sacando los valores de tu base de datos e irlos "imprimiendo" con echos o metiendolos en una variable para que al final la puedas imprimir con un "echo $variable". Si quieres que tus datos tengas una estructura (por ejemplo una tabla) puedes usar etiquetas html como si estuvieras haciendo una página web ya que word las interpretará y dará formato a tu texto.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #19 (permalink)  
Antiguo 04/11/2005, 17:36
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Estoy realmente emocionado!!!!

He probado este ultimo código poniendo como saltos de linea <br>(y no \r\n)
y me funciona.

Muchas,muchas,muchas gracias living

Te debo unas cañas,je je
  #20 (permalink)  
Antiguo 04/11/2005, 17:40
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
Cita:
Iniciado por robandrox
Te debo unas cañas,je je
No habré escuchado/leido esto veces

Me alegra mucho haberte servido de ayuda
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #21 (permalink)  
Antiguo 10/11/2005, 16:38
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 5 meses
Puntos: 0
Hola chicos...

yo tengo el mismo problema que robandrox y ya chequé la función que probablemente resolvería mi problema pero la función file_get_contents($filename) no la reconoce mi php, habrá otra función con la que pueda sustituirla o qué puedo hacer???
  #22 (permalink)  
Antiguo 11/11/2005, 01:41
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
$contenidoFichero= implode('', file(filename));

Este sería el equivalente para versiones anteriores a la 4.3
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #23 (permalink)  
Antiguo 11/11/2005, 10:17
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 5 meses
Puntos: 0
Mil gracias...
Esa función me va a servir de mucho...
  #24 (permalink)  
Antiguo 22/11/2005, 15:35
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 5 meses
Puntos: 0
Salto de línea

He visto que que arriba se comentaba como colocar un salto de página en rtf pero a mí no me funciona... no se si hay otra manera yo lo tengo así:

Código PHP:
$aprobot=$row_aprobo['nombre']. "\r\n" .$row_aprobo['ape_paterno']." ".$row_aprobo['ape_materno']; 
Así cuando genero el rtf no me imprime nada

Código PHP:
$aprobot=$row_aprobo['nombre']. "<br>" .$row_aprobo['ape_paterno']." ".$row_aprobo['ape_materno']; 
Y con este código me imprime esto: <br>

Ahora no sé si es por el php que está instalado en el servidor ya que tiene una versión vieja y me ha dado problemas con otras cosas...

Ojalá y alguien me pueda ayudar
  #25 (permalink)  
Antiguo 28/11/2005, 12:49
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 5 meses
Puntos: 0
Ya revisé mi código y si me guarda el interlineado en mi campo LongText en mi base de datos y realmente mi problema es que no lo despliega en el rtf, ni tampoco lo despliega en html, no sé si me puedan ayudar ya que tengo rato con esto y no lo he podido resolver.
  #26 (permalink)  
Antiguo 31/03/2006, 16:35
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
donde se puede conseguir los codigos para negrita centrado y demas cuadno se genera como el codigo e salto de linea q ya nos dieron
__________________
Software a Medida
voip Locutorios
  #27 (permalink)  
Antiguo 07/04/2006, 07:58
 
Fecha de Ingreso: enero-2005
Mensajes: 47
Antigüedad: 19 años, 3 meses
Puntos: 0
Hola,


Necesito crear un .doc o .pdf usando los campos de un formularios y entre los esos esta un textarea en el que uso htmlarea, es decir, el usuario puede incluir texto en negritas, viñetas, entre otras. El problema es que al tratar de hacerlo como se explica más arriba no aparece el texto en negritas o las viñetas por mencionar algo.

Si alguien sabe como podria solucionar este problema se lo agradeceria mucho
  #28 (permalink)  
Antiguo 08/04/2006, 11:41
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
finalmente encontre una soluciona mi problema, indagando por ahy, espero que te pueda ayudar:

Código PHP:
<?php

//Cargamos las variables del formulario

$nombre1=($_POST['representante']);
$nombre2=($_POST['cliente']);
$dni1=($_POST['dnirepresentante']);
$dni2=($_POST['dnicliente']);
$cntd=($_POST['cantidad']);
$montoletras=($_POST['montol']);
$montonumeros=($_POST['monton']);
//fecha

$fecha1=($_POST['dia']);
$fecha2=($_POST['r2']);
$fecha3=($_POST['r3']);

//Los checks
$chekm=($_POST['chekm']);
$chekp=($_POST['chekp']);
$chekd=($_POST['chekd']);
$chekme=($_POST['chekme']);
$chekf=($_POST['chekf']);
$chekc=($_POST['chekc']);
$cheku=($_POST['cheku']);
$chekpa=($_POST['chekpa']);
$chekt=($_POST['chekt']);
$chekmo=($_POST['chekmo']);
$chekmon=($_POST['chekmon']);

//datos de los Checks
$mainboard=($_POST['mainboard']);
$procesador=($_POST['procesador']);
$disco=($_POST['disco']);
$memoria=($_POST['memoria']);
$floppy=($_POST['floppy']);
$optica=($_POST['optica']);
$case=($_POST['case']);
$parlantes=($_POST['parlantes']);
$teclado=($_POST['teclado']);
$mouse=($_POST['mouse']);
$monitor=($_POST['monitor']);

$fechatotal "Lima " .$fecha1" de " .$fecha2" del " .$fecha3;


$ninguno="ninguna Seleccionada";


header('Content-type: application/msword');
header('content-Disposition: inline, filename=documento.rtf');
$filename "plantilla.rtf";

$output file_get_contents($filename);

//Primera Seccion de Formulario

$output str_replace('nombre1'$nombre1$output);
$output str_replace('nombre2'$nombre2$output);
$output str_replace('numerodni1'$dni1$output);
$output str_replace('numerodni2'$dni2$output);
$output str_replace('cntd'$cntd$output);
$output str_replace('fechaform'$fechatotal$output);


//Segunda Seccion de Formulario

if ($chekm=="ON")
    {
        
$output str_replace('main'$mainboard$output);    
    }
Else
    {
        
$output str_replace('main'$ninguno$output);
    };
    
if (
$chekp=="ON")
    {
        
$output str_replace('prce'$procesador$output);    
    }
Else
    {
        
$output str_replace('prce'$ninguno$output);
    };
    
if (
$chekd=="ON")
    {
        
$output str_replace('disd'$disco$output);    
    }
Else
    {
        
$output str_replace('disd'$ninguno$output);
    };
    
if (
$chekme=="ON")
    {
        
$output str_replace('mri'$memoria$output);    
    }
Else
    {
        
$output str_replace('mri'$ninguno$output);
    };
    
if (
$chekf=="ON")
    {
        
$output str_replace('fpy'$floppy$output);    
    }
Else
    {
        
$output str_replace('fpy'$ninguno$output);
    };
    
if (
$cheku=="ON")
    {
        
$output str_replace('letc'$optica$output);    
    }
Else
    {
        
$output str_replace('letc'$ninguno$output);
    };
    
if (
$chekc=="ON")
    {
        
$output str_replace('cse'$case$output);    
    }
Else
    {
        
$output str_replace('cse'$ninguno$output);
    };
    
if (
$chekpa=="ON")
    {
        
$output str_replace('prlt'$parlantes$output);    
    }
Else
    {
        
$output str_replace('prlt'$ninguno$output);
    };

if (
$chekt=="ON")
    {
        
$output str_replace('tld'$teclado$output);    
    }
Else
    {
        
$output str_replace('tld'$ninguno$output);
    };


if (
$chekmo=="ON")
    {
        
$output str_replace('mse'$mouse$output);    
    }
Else
    {
        
$output str_replace('mse'$ninguno$output);
    };

if (
$chekmon=="ON")
    {
        
$output str_replace('mnt'$monitor$output);    
    }
Else
    {
        
$output str_replace('mnt'$ninguno$output);
    };
        
        
//tercera Seccion de Formulario

$ad1=($_POST['ad1']);
$ad2=($_POST['ad2']);
$ad3=($_POST['ad3']);
$ad4=($_POST['ad4']);
$ad5=($_POST['ad5']);
$ad6=($_POST['ad6']);

$adic1=($_POST['adic1']);
$adic2=($_POST['adic2']);
$adic3=($_POST['adic3']);
$adic4=($_POST['adic4']);
$adic5=($_POST['adic5']);
$adic6=($_POST['adic6']);
$rrr=".";

if (
$ad1=="ON")
    {
        
$output str_replace('pzare'$adic1$output);
    }
Else
    {
        
$output str_replace('pzare'$rrr$output);
    };
    
if (
$ad2=="ON")
    {
        
$output str_replace('pzara'$adic2$output);        
    }
Else
    {
        
$output str_replace('pzara'$rrr$output);
    };
    
    
if (
$ad3=="ON")
    {
        
$output str_replace('pzaca'$adic3$output);            
    }
Else
    {
        
$output str_replace('pzaca'$rrr$output);
    };
    
    
if (
$ad4=="ON")
    {
        
$output str_replace('piezafor'$adic4$output);
                
    }
Else
    {
        
$output str_replace('piezafor'$rrr$output);
    };
    
    
if (
$ad5=="ON")
    {
        
$output str_replace('pzata'$adic5$output);
                
    }
Else
    {
        
$output str_replace('pzata'$rrr$output);
    };


if (
$ad6=="ON")
    {
        
$output str_replace('pzafa'$adic6$output);
                    
    }
Else
    {
        
$output str_replace('pzafa'$rrr$output);
    };
    

//cuarta Seccion de Formulario

$output str_replace('montoletras'$montoletras$output);
$output str_replace('montonumeros'$montonumeros$output);

    echo 
$output;

?>
con los str_replase puedes remplazar las palabras de tu plantilla con las de tu form
__________________
Software a Medida
voip Locutorios
  #29 (permalink)  
Antiguo 15/06/2007, 23:27
 
Fecha de Ingreso: abril-2007
Mensajes: 12
Antigüedad: 17 años
Puntos: 0
Re: Generar documentos de Word RTF en php

hola amigos del foro, soy un novato en esto del php y este foro me ha ayudado mucho no tienen idea en serio!!. Pero ahora me encuentro frente a un problama estoy realizando un proyecto que realiza invitaciones, los datos los debo obtener de una base de datos y generar un documento para luego envierlo por correo, ya he probado la creacion de pdf´s mediente php y me funciona bien, pero el problema es que el contenido de la invitacion varia mucho en cada una, y ese contenido lo capturan en documentos word, es posible obtener ese contenido y escribirlo en un pdf. Mi idea es crear un escrip que obtenega la info de la base de datos como el nombre y cargo y obtener el contenido de un docuemnto word y todo eso ponerlo en un pdf. Vaya no se si me explico pero espero que alguien me pudiera ayudar con lo que sea, se aceptan otras soluciones muchas gracias y de antemano un saludo..
  #30 (permalink)  
Antiguo 03/07/2007, 09:19
 
Fecha de Ingreso: junio-2007
Mensajes: 19
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: Generar documentos de Word RTF en php

Probe el codigo para pasar a doc word...
Código PHP:
<? 
header
("Content-Description: File Transfer"); 
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename= ARCHIVO.doc"); 
?>
El codigo funciona perfectamente si utilizo openoffice, el problema es cuando trato de abrirlo con office, en vez de salir los datos que se extrajeron de la BD me sale todo el codigo de la pagina junto con los datos...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 20:16.