| Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS | ||||
| ARTICULO: Generar documentos de Word RTF con php |
Se muestran 22 comentarios sin revisar
| Ruben | 06/7/05 |
| Hola me gustaria saber como puedo modificar el script para que en lugar de que se almacenen los documentos en el disco duro los envie por email a un campo de la base de datos, por ejemplo cada alumno tiene en la base de datos su email y yo quiero enviar cada carta a un mail | |
| German Infante | 07/7/05 |
| el artículo es intresante, le hacen falta algunas líneas de código para realizar bien la conexión a mysql desde PHP. Ya lo probé y funciona perfectamente y como lo dice su autor la plantilla en formato rtf es bastante sensible con caracteres extraños. Edite la plantilla con un editor de php como el maguma y elimine los caracteres extraños y todo funciono OK. Bucaramanga-Colombia |
|
| Fabi | 18/8/05 |
| linea 6 del codigo (función leef())cambiar: $tamleef - sizeof($texto); por $tamleef = sizeof($texto); |
|
| Juan Carlos | 27/9/05 |
| Bueno, soy un aprendiz de php... Para mi proyecto necesito preparar reportes en mi aplicación!!! El codigo lo he utilizado... Pero no pasa NADA!!! al realizar click en obtener se abre el archivo y lo que hay en el es solo: "sectd}" si alguien me puede ayudar!!!! le agradeceria... | |
| Juan Carlos | 29/9/05 |
| Gracias FABI!!! era eso y otro error que tenia!!! pero ahora se ve bien y en mi word tambien, pero una vez que lo imprimo no se ven las cajas de texto... Si tenes alguna idea... del porque... | |
| christian landeo | 04/11/05 |
| Estoy modificando el codigo, pero no estoy pasando una sentencia sql, sino que el reemplazo ya lo hice antes. La cuestion es que no funciona, no reemplaza nada. function leef ($fichero) { $texto = file($fichero); $tamleef = sizeof($texto); for ($n=0;$n<$tamleef;$n++) { $todo = $todo.$texto[$n]; } return $todo; } function crearRtf($plantilla,$fsalida,$matequivalencias,$contador) { $nombrefile = $fsalida; $fsalida = "/var/www/html/notaria/documentos/".$fsalida; $rtf = new Rtf(); $txtplantilla = $rtf->leef($plantilla); $matriz = explode("sextf",$txtplantilla); $cabecera=$matriz[0]."sectd"; $inicio=strlen($cabecera); $final=strrpos($txtplantilla,"}"); $largo = $final - $inicio; // $cuerpo = substr($txtplantilla,$inicio,$largo); $cuerpo = $txtplantilla; $punt=fopen($fsalida, "w"); fputs($punt,$cabecera); $despues = $cuerpo; foreach ($matequivalencias as $dato) { $datosql=$dato[1]; $datosql=stripslashes($datosql); $datortf=$dato[0]; $despues = str_replace($datortf,$datosql,$despues); } fputs($punt,$despues); $saltopag = "\par \page \par"; fputs($punt,$saltopag); fputs($punt,")"); fclose($punt); $fsalida = "../documentos/".$nombrefile; return $fsalida; } |
|
| Jaime | 07/11/05 |
| Cuando abre el Word me escribe solamente esto: sectd\par \page \par\par \page \par\par \page \par} Si alguien sabe como arreglarlo, aviseme a gatroxx@yahoo.es o gatrox@gmail.com |
|
| Agustín | 30/11/05 |
| He transcrito el codigo en PHP y no he obtenido resultados positivo agradeceria a la persona (as) que ya obtubieron resultados satifactorios su apoyo | |
| Agustín | 30/11/05 |
| Cree tres ficheros php uno llamado funciones.php, otro llamado Formato.php y uno tercero para la conexion. Aqui el Fichero Funciones.php function leef($fichero){ $texto = file($fichero); $tamleef= sizeof($texto); for ($n=0;$n<$tamleef;$n++){ $todo=$todo.$texto[$n]; } return $todo; } $todo = leef($fichero); function rtf($sql,$plantilla,$fsalida,$matequivalencias){ include ("cnn.php"); $pre = time(); $fsalida = "/Capacitacion/php/".$pre.$fsalida; $txtplantilla = leef($plantilla); $matriz= explode("sectd",$txtplantilla); $cabecera = $matriz[0]."sectd"; $inicio= sterlen($cabecera); $final= strrpos($txtplantilla,"}"); $largo=$final-$inicio; $cuerpo=substr($txtplantilla,$inicio,$largo); $punt=fopen($fsalida, "w"); fputs($punt,$cabecera); $result=mysql_query($sql); While ($row=mysql_fetch_object($result)){ $despues=$cuerpo; foreach ($matequivalencias as $dato) { $datosql=$row->$dato[1]; $datosql=stripslashes ($datosql); $datortf=$dato[0]; $despues=str_replace($datortf,$datosql,$despues); } fputs($punt,$despues); $saltopag="\par \page \par"; fputs($punt,$saltopag); } fputs($punt,"}"); fclose($punt); return $fsalida; } $salida = rtf($sql,$plantilla,$fsalida,$matequivalencias) Como pueden apreciar inclui el archivo cnn.php para la conexion y seleccion de la base de datos Aqui el fichero Formato.php include ("Funciones.php"); $plantilla = "plantilla.rtf"; $sql= "SELECT * FROM reintegro"; $equivalencias[0][0]="#*rfc*#"; $equivalencias[0][1]="#*nombre*#"; $equivalencias[1][0]="#*cve_p*#"; $equivalencias[1][1]="#*cct*#"; echo "<a href=\"$salida\">Obtener</a>"; Y por ultimo el fichero cnn.php function cnn() { $host = 'localhost'; $usr = 'root'; $cve = '*******'; $bd = 'base_reintegros'; $conexion = mysql_connect($host, $usr, $cve); if (! $conexion){ echo "El usurio $usr no se ha podido conectar al Servidor $host"; exit();} else{ echo " "."<BR>"; } if (!mysql_select_db($bd,$conexion)){ echo "Error al seleccionar la base de datos: $bd"; } return $conexion; } $conexion = cnn(); Bueno a todo esto el detalle esta en que no me funciona en la practica he detectado error en esta linea $salida = rtf($sql,$plantilla,$fsalida,$matequivalencias) Si alguien pudiera asesorarme diciendome que estoy haciendo mal mi correo guti01@gmail.com De antemano Gracias por la atención |
|
| Churris | 12/1/06 |
| Hola, parece que la idea del script es bastante buena, pero tiene algunas fallas, por ahi antes del while tiene unos detalles la conexion, sustituyanlo por mysql_select_db("data_base"); $result = mysql_query($sql); y al momento de recuperar el dato de la base de datos sería de la siguiente forma $datosql = $row[$dato[1]]; en vez de $datosql = $row->$dato[1]; Saludos El churris |
|
| @ndrey | 19/1/06 |
| BUeno ya me funciono el codigo correstamente, le hice algunos cambios pequeños que estan contemplados por otos participantes de este articulo, Solo cambie un poco la sentencia SQL por una mas basica y puse la ruta completa de la plantilla. Tuve un problema por que no me reeemplazaba los campos en la plantilla por los datos de la BD, intenten primero solo colocabdo en la platilla el #*NOMBRE*#, y cuando ya reeemplace pongan el texto que deseen.. //codigo.... <?php function leef($fichero) { $texto= file($fichero); $tamleef = sizeof($texto); for ($n=0; $n<$tamleef;$n++) { $todo = $todo.$texto[$n];} return $todo; } function rtf($sql, $plantilla, $fsalida, $matequivalencias) { $pre=time(); $fsalida="C:/AppServ/www/1/".$pre.$fsalida; $link=mysql_connect('localhost','tu_usurio','tu_clave'); $txtplantilla=leef($plantilla); $matriz=explode("sectd",$txtplantilla); $cabecera=$matriz[0]."sectd"; $inicio=strlen($cabecera); $final=strrpos($txtplantilla,"}"); $largo=$final-$inicio; $cuerpo=substr($txtplantilla,$inicio,$largo); $punt = fopen($fsalida ,"w"); fputs($punt,$cabecera); mysql_select_db("tu_db",$link); $result=mysql_query($sql,$link); while($row=mysql_fetch_array($result)){ $despues=$cuerpo; foreach($matequivalencias as $dato){ $datosql=$row[$dato[1]]; $datosql=stripslashes($datosql); $datortf=$dato[0]; $despues=str_replace($datortf,$datosql,$despues); } fputs($punt,$despues); $saltopag="\par \page \par"; fputs($punt,$saltopag); } fputs($punt,"}"); fclose($punt); return $fsalida; } $plantilla="plantilla.rtf"; $sql = "SELECT usuario,contrase FROM usuarios ORDER BY usuario"; $equivalencia[0][0]="#*NOMBRE*#"; $equivalencia[0][1]="usuario"; $equivalencia[1][0]="#*CLAVE*#"; $equivalencia[1][1]="contrase"; $salida=rtf($sql,$plantilla,"certificado.rtf",$equivalencia); $salida="<A href='$salida'>Obtener</A>"; echo("<p>$salida</p>"); ?> Ha tengan presente el orden enque estan la equivalencias una hace referencia al nombre en la plantilla $equivalencia[0][0]="#*algo*#"; y la otra al campo en la DB $equivalencia[0][1]="nombre campo base de datos"; espero ke les sirva. |
|
| @ndrey | 19/1/06 |
| BUeno ya me funciono el codigo correstamente, le hice algunos cambios pequeños que estan contemplados por otos participantes de este articulo, Solo cambie un poco la sentencia SQL por una mas basica y puse la ruta completa de la plantilla. Tuve un problema por que no me reeemplazaba los campos en la plantilla por los datos de la BD, intenten primero solo colocabdo en la platilla el #*NOMBRE*#, y cuando ya reeemplace pongan el texto que deseen.. //codigo.... <?php function leef($fichero) { $texto= file($fichero); $tamleef = sizeof($texto); for ($n=0; $n<$tamleef;$n++) { $todo = $todo.$texto[$n];} return $todo; } function rtf($sql, $plantilla, $fsalida, $matequivalencias) { $pre=time(); $fsalida="C:/AppServ/www/1/".$pre.$fsalida; $link=mysql_connect('localhost','tu_usurio','tu_clave'); $txtplantilla=leef($plantilla); $matriz=explode("sectd",$txtplantilla); $cabecera=$matriz[0]."sectd"; $inicio=strlen($cabecera); $final=strrpos($txtplantilla,"}"); $largo=$final-$inicio; $cuerpo=substr($txtplantilla,$inicio,$largo); $punt = fopen($fsalida ,"w"); fputs($punt,$cabecera); mysql_select_db("tu_db",$link); $result=mysql_query($sql,$link); while($row=mysql_fetch_array($result)){ $despues=$cuerpo; foreach($matequivalencias as $dato){ $datosql=$row[$dato[1]]; $datosql=stripslashes($datosql); $datortf=$dato[0]; $despues=str_replace($datortf,$datosql,$despues); } fputs($punt,$despues); $saltopag="\par \page \par"; fputs($punt,$saltopag); } fputs($punt,"}"); fclose($punt); return $fsalida; } $plantilla="plantilla.rtf"; $sql = "SELECT usuario,contrase FROM usuarios ORDER BY usuario"; $equivalencia[0][0]="#*NOMBRE*#"; $equivalencia[0][1]="usuario"; $equivalencia[1][0]="#*CLAVE*#"; $equivalencia[1][1]="contrase"; $salida=rtf($sql,$plantilla,"certificado.rtf",$equivalencia); $salida="<A href='$salida'>Obtener</A>"; echo("<p>$salida</p>"); ?> Ha tengan presente el orden enque estan la equivalencias una hace referencia al nombre en la plantilla $equivalencia[0][0]="#*algo*#"; y la otra al campo en la DB $equivalencia[0][1]="nombre campo base de datos"; espero ke les sirva. |
|
| @ndrey | 19/1/06 |
| BUeno ya me funciono el codigo correstamente, le hice algunos cambios pequeños que estan contemplados por otos participantes de este articulo, Solo cambie un poco la sentencia SQL por una mas basica y puse la ruta completa de la plantilla. Tuve un problema por que no me reeemplazaba los campos en la plantilla por los datos de la BD, intenten primero solo colocabdo en la platilla el #*NOMBRE*#, y cuando ya reeemplace pongan el texto que deseen.. //codigo.... <?php function leef($fichero) { $texto= file($fichero); $tamleef = sizeof($texto); for ($n=0; $n<$tamleef;$n++) { $todo = $todo.$texto[$n];} return $todo; } function rtf($sql, $plantilla, $fsalida, $matequivalencias) { $pre=time(); $fsalida="C:/AppServ/www/1/".$pre.$fsalida; $link=mysql_connect('localhost','tu_usurio','tu_clave'); $txtplantilla=leef($plantilla); $matriz=explode("sectd",$txtplantilla); $cabecera=$matriz[0]."sectd"; $inicio=strlen($cabecera); $final=strrpos($txtplantilla,"}"); $largo=$final-$inicio; $cuerpo=substr($txtplantilla,$inicio,$largo); $punt = fopen($fsalida ,"w"); fputs($punt,$cabecera); mysql_select_db("tu_db",$link); $result=mysql_query($sql,$link); while($row=mysql_fetch_array($result)){ $despues=$cuerpo; foreach($matequivalencias as $dato){ $datosql=$row[$dato[1]]; $datosql=stripslashes($datosql); $datortf=$dato[0]; $despues=str_replace($datortf,$datosql,$despues); } fputs($punt,$despues); $saltopag="\par \page \par"; fputs($punt,$saltopag); } fputs($punt,"}"); fclose($punt); return $fsalida; } $plantilla="plantilla.rtf"; $sql = "SELECT usuario,contrase FROM usuarios ORDER BY usuario"; $equivalencia[0][0]="#*NOMBRE*#"; $equivalencia[0][1]="usuario"; $equivalencia[1][0]="#*CLAVE*#"; $equivalencia[1][1]="contrase"; $salida=rtf($sql,$plantilla,"certificado.rtf",$equivalencia); $salida="<A href='$salida'>Obtener</A>"; echo("<p>$salida</p>"); ?> Ha tengan presente el orden enque estan la equivalencias una hace referencia al nombre en la plantilla $equivalencia[0][0]="#*algo*#"; y la otra al campo en la DB $equivalencia[0][1]="nombre campo base de datos"; espero ke les sirva. |
|
| Pere | 30/1/06 |
| ¡Hola! Ahora mismo no tengo aquí un ejemplo de código parecido al tuyo que pillé de un libro. (te felicito, es muy bueno). Pero alguien sabría insertar una imagen en el documento final RTF? (una imagen que se encuentra en la bdd y es distinta para cada usuario. Por ejemplo, en el caso que tú pones, como si tubiera que aparecer la fotografía de cada alumno. Soy incapaz de conseguirlo, aún habiendo hecho millones de purebas. |
|
| favs_01 | 16/2/06 |
| Hola he probado este articulo y me genera un error que no he podido resolver Warning: file(plantilla.rft) [function.file]: failed to open stream: No such file or directory in C:\Servidor\WEB\SEC\aepaf\constanciaapfrtf.php on line 7 no me encuentra el fichero pero este si se encuentra en el directorio Aguien le ha ido bien ?? |
|
| favs_01 | 16/2/06 |
| Hola he solucionado el problema del archivo con el ejemplo de @ndrey, pero ahora obtengo el archivo en blanco =( aqui les pongo lo que estoy haciendo function leef($fichero) { $texto= file($fichero); $tamleef = sizeof($texto); for ($n=0; $n<$tamleef;$n++) { $todo = $todo.$texto[$n];} return $todo; } function rtf($plantilla, $fsalida, $matequivalencias) { $pre=time(); $fsalida="reporte".$pre.$fsalida; $txtplantilla=leef($plantilla); $matriz=explode("sectd",$txtplantilla); $cabecera=$matriz[0]."sectd"; $inicio=strlen($cabecera); $final=strrpos($txtplantilla,"}"); $largo=$final-$inicio; $cuerpo=substr($txtplantilla,$inicio,$largo); $punt = fopen($fsalida ,"w"); fputs($punt,$cabecera); require_once('conexion.php'); require_once('conexionct.php'); $busqueda = mysql_query("SELECT a.*, b.NOMBRELOC, c.NOMBRECT, d.NOMBRE_DIR, d.PUESTO, d.FIRMA from asoc.integrantes a, asoc.a_itba b, ctba.a_ctba c, asoc.firma_constancias d where a.CCT = '".$_COOKIE["clavecct"]."' and b.MUNICIPIO = a.NMPIO AND b.LOCALIDAD = '0000' AND a.CTIPOASOC = 'APF' and a.CPUESTO = 'PR' AND c.CLAVECCT = '".$_COOKIE["clavecct"]."'"); $row = mysql_fetch_array($busqueda); //mysql_select_db("tu_db",$link); //$result=mysql_query($sql,$link); while($row=mysql_fetch_array($busqueda)){ $despues=$cuerpo; foreach($matequivalencias as $dato){ $datosql=$row[$dato[1]]; $datosql=stripslashes($datosql); $datortf=$dato[0]; $despues=str_replace($datortf,$datosql,$despues); } fputs($punt,$despues); $saltopag="\par \page \par"; fputs($punt,$saltopag); } fputs($punt,"}"); fclose($punt); return $fsalida; } $plantilla="plantilla.rtf"; //$sql = "SELECT a.*, b.NOMBRELOC, c.NOMBRECT, d.NOMBRE_DIR, d.PUESTO, d.FIRMA from asoc.integrantes a, asoc.a_itba b, ctba.a_ctba c, asoc.firma_constancias d where a.CCT = '".$_COOKIE["clavecct"]."' and b.MUNICIPIO = a.NMPIO AND b.LOCALIDAD = '0000' AND a.CTIPOASOC = 'APF' and a.CPUESTO = 'PR' AND c.CLAVECCT = '".$_COOKIE["clavecct"]."'"; $equivalencias[0][0]="#*NOMBREPR*#"; $equivalencias[0][1]="CNOMBRE"; $equivalencias[1][0]="#*NOMBRECCT*#"; $equivalencias[1][1]="NOMBRECCT"; $equivalencias[2][0]="#*MUNICIPIO*#"; $equivalencias[2][1]="NOMBRELOC"; $equivalencias[3][0]="#*CLAVECCT*#"; $equivalencias[3][1]="CCT"; $equivalencias[4][0]="#*CLAVEASOC*#"; $equivalencias[4][1]="CCLAVEASOC"; $salida=rtf($plantilla,"certificado.rtf",$equivalencia); $salida="<A href='$salida'>Obtener</A>"; echo("<p>$salida</p>"); ?> |
|
| genaro | 23/6/06 |
| muy bueno el articulo, yo realice lo mismo pero para una base de datos postgresql, ademas cambie algunos valores al principio para iniciar las variables. function leef($fichero) { $texto=file($fichero); $tamleef=0; $tamleef=$tamleef+sizeof($texto); //$tamleef sizeof($texto); for($n=0 ; $n < $tamleef ;$n++) { $todo=$todo.$texto[$n]; } return $todo; } |
|
| celia | 06/7/06 |
| hola, Yo tengo un problema que se ha planteado más arriba: insertar una imagen en el documento final RTF (una imagen que se encuentra en la bdd y es distinta para cada usuario). He probado de mil maneras pero no he podido conseguirlo. Alguien sabe cómo hacerlo? |
|
| c3sar | 14/9/06 |
| tan puro gueviando,, HAY UNA FORMA MAS FACIL | |
| zamora | 07/11/06 |
| hola amigos en mi pagina quiero poner archivos en word para q lo revise otro usuario y me envie una respuesta del documento como un comentario pero automaticamante se almacene en mi base de datos; la base de datos es solicitudes y los campos son aceptada o rechazada dependiendo de la respuesta de usuario por favor si alguien me pùede ayudar | |
| Williams | 01/12/06 |
| Amigos me sale esto \"sectd\\par \\page \\par}\" en el word!!!!!!alguien me puede ayudar porfavor????? Gracias | |
| galax13a | 04/10/07 |
| bueno amigo mio es muy interesante tu aporte sobre el tema q trata , pero seria recomentable que no pegaras las images ya que es dificil trasquibir ya que se pueden producir errores . seria recomendable q siempre trabajas textos si es posible o mejor aun si tenez el .zip para bajarlo seria famuloso de ante mando gracias por tu aporte. | |
| Ver el articulo y todos sus comentarios | |
| Añadir un comentario del artículo |
|
Comentarios no revisados de: |