Foros del Web » Programando para Internet » PHP »

Plantillas para Word en PHP

Estas en el tema de Plantillas para Word en PHP en el foro de PHP en Foros del Web. Hola, tengo el siguiente problema: me he creado un fichero en PHP para generar documentos .rtf de este modo: $archivo = file_get_contents('plantilla_etiquetas.rtf'); $archivo = str_replace('tg_nm_document',csv_encode_conv($num_ ...
  #1 (permalink)  
Antiguo 28/09/2013, 07:57
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Plantillas para Word en PHP

Hola,
tengo el siguiente problema:
me he creado un fichero en PHP para generar documentos .rtf de este modo:

$archivo = file_get_contents('plantilla_etiquetas.rtf');
$archivo = str_replace('tg_nm_document',csv_encode_conv($num_ document_find),$archivo);
...
...tras ejecutar una query en sql, recupero uno de los campos y se lo asigno a un campo de la plantilla.
Hasta aquí todo perfecto, pero ahora sólo consigo leer correctamente la plantilla si accedo yo al servidor vía ftp y me lo descargo manualmente porque si lo intento hacer así:

$ruta = './etiquetas/'.$archivo;

if (is_file($ruta))
{
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$archivo);
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($ruta));

readfile($ruta);
}
else
exit();

me lo descargo en texto plano ilegible y no hay forma de leerlo correctamente aunque le modifique la extensión.

¿Quizás sea porque se necesite instalar el wordo en el servidor?,

gracias
  #2 (permalink)  
Antiguo 28/09/2013, 11:04
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Plantillas para Word en PHP

Por lo que puedo ver la variable $archivo esta todo el contenido del archivo rtf y no el nombre del archivo en si, lo que podrias hacer es guardar en una variable el nombre del archivo y ésta concatenarla a la variable $ruta
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 28/09/2013, 11:41
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Plantillas para Word en PHP

Muchas gracias SkAr88 por contestar,
perdoname por haberlo redactado antes así pero la verdad es que intentaba simplificarlo para que quedase más claro y lo que hice fue liaros más; en realidad eso que comentas no es pues el código lo tengo así:
Justo después de generar el fichero, llamo a la función "descargar":

descargar('et_doc'.$num_documento.'_part_'.$partid a.'.rtf');


function descargar($archivo){
$ruta = './etiquetas/'.$archivo;

if (is_file($ruta))
{
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$archivo);
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($ruta));

readfile($ruta);
}
else
exit();
}

Ya os digo que si luego me lo descargo yo manualmente por ftp lo puedo abrir perfectamente el fichero pero claro, me gustaría dejar esto automatizado.
En fin, si tenéis alguna otra idea os lo agradecería.
  #4 (permalink)  
Antiguo 28/09/2013, 12:55
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Plantillas para Word en PHP

Y como generas el fichero?
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #5 (permalink)  
Antiguo 28/09/2013, 13:41
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Plantillas para Word en PHP

Hola,
es verdad, me faltaba por enseñaros más código fuente; lo pongo a continuación (gracias de antemano):

$sql = "SELECT.....";

$res = mysqli_query($link,$sql);

while ($row = mysqli_fetch_array($res)){
$num_documento_find = $row["num_documento"];
$partida_find = $row["partida"];

$archivo = file_get_contents('plantilla_etiquetas.rtf');
$archivo = str_replace('tag_num_documento',csv_encode_conv($n um_documento_find),$archivo);
$archivo = str_replace('tag_partida',csv_encode_conv($partida _find),$archivo);

//Aquí genero el fichero
file_put_contents('./etiquetas/et_doc_'.$num_documento_find.'_part_'.$partida_fin d.'.rtf',$archivo);

echo '<H3 style="font-family:Calibri; font-size:20px; font-weight:bold; color:green;">et_doc_'.$num_documento_find.'_part_ '.$partida_find.'.rtf</H2>';

//Aquí llamaría a la función descargar que es la que te comenté antes descargar('et_doc'.$num_documento_find.'_part_'.$p artida_find.'.rtf');
}
  #6 (permalink)  
Antiguo 28/09/2013, 14:04
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Plantillas para Word en PHP

Por favor podrias usar highlight no se entiende mucho
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #7 (permalink)  
Antiguo 30/09/2013, 01:53
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Plantillas para Word en PHP

Ahora me pasa algo más extraño todavía (os voy a poner todo el código fuente al completo para que no haya dudas):

en la función "descargar" abajo no se cumple "if (is_file($ruta))"; es false, por lo tanto no ejecuta la descarga; de todas formas si fuerzo la descarga comentando ese IF, el fichero que me descarga contiene sólo el HTML que voy componiendo a lo largo de este fichero: "Etiquetas generadas", etc.

Algo está fallando ahí y no sé el qué es, pero ya os digo que los ficheros los genera correctamente, es decir, si no incluyo lo de la descarga y me los descargo yo mismo vía ftp los ficheros están perfectos; allá va el código (gracias):


<?php
include("./includes/seguridad.php");
include("./includes/funciones.php");

function csv_encode_conv($var, $enc='Windows-1252') {
$var = htmlentities($var, ENT_QUOTES, 'utf-8');
$var = html_entity_decode($var, ENT_QUOTES , $enc);
return $var;
}


$pedido_find=$_SESSION["pedido"];
$sql = "SELECT * FROM basereparaciones.t_cabecera, basereparaciones.t_detalle WHERE t_cabecera.pedido = t_detalle.pedido
and t_detalle.pedido = '".$pedido_find."'";

$res = mysqli_query($link,$sql);
?>
<body bgcolor = "#DDDDDD" >
<center><h1 style='font-family:Calibri; font-size:28px; font-weight:bold; color:green;'>Etiquetas generadas:<br></h2>

<?
while ($row = mysqli_fetch_array($res)){
$num_documento_find = $row["num_documento"];
$pedido_find = $row["pedido"];
$partida_find = $row["partida"];

$archivo = file_get_contents('plantilla_etiquetas.rtf');
$archivo = str_replace('tag_num_documento',csv_encode_conv($n um_documento_find),$archivo);
$archivo = str_replace('tag_pedido',csv_encode_conv($pedido_f ind),$archivo);
$archivo = str_replace('tag_partida',csv_encode_conv($partida _find),$archivo);


file_put_contents('./etiquetas/et_doc_'.$num_documento_find.'_part_'.$partida_fin d.'.rtf',$archivo);

echo '<H3 style="font-family:Calibri; font-size:20px; font-weight:bold; color:green;">et_doc_'.$num_documento_find.'_part_ '.$partida_find.'.rtf</H2>';

descargar('et_doc'.$num_documento_find.'_part_'.$p artida_find.'.rtf');
}


function descargar($archivo){

$ruta = './etiquetas/'.$archivo;

if (is_file($ruta))
{
//header ("Content-Type: application/octet-stream");
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$archivo);
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($ruta));

readfile($ruta);
}
//else
//exit();
}

?>
<table border = 0><tr>
<td><input type="button" name="nvolver" value=' Volver ' style = 'font-size:10px; font-family:Verdana; font-weight:bold; color:white; background:#638cb5; border:0px; width:80px; height:19px;cursor:pointer;' onclick="redirec();" onmouseover='style.color = "yellow";' onmouseout='style.color = "#FFFFFF";'></td>

<td><input type="button" name="salir" value=' Salir ' style = 'font-size:10px; font-family:Verdana; font-weight:bold; color:white; background:#638cb5; border:0px; width:80px; height:19px;cursor:pointer;' onclick="salir2();" onmouseover='style.color = "yellow";' onmouseout='style.color = "#FFFFFF";'></td>
</tr></table>
</center>

<script language=javascript>


function redirec(){
location.href="http://www...."
}
function salir2(){
location.href="http://www...."
}

</script>
</body>
  #8 (permalink)  
Antiguo 04/10/2013, 02:01
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Plantillas para Word en PHP

Hola,
sigo sin solucionarlo..., os comento el problema que tengo ahora (y gracias de antemano):

Tengo que generar un fichero de word a partir de una plantilla con extensión .RTF desde PHP.
Lo que hago es generar una query y por cada registro resultante, que genere un documento word (bueno, ,RFT); dichos documentos se generan bien pero sólo puedo visualizarlos bien si los arrastro manualmente desde el filezilla porque si le meto en el código fuente que se me descarguen automáticamente, luego lo abro y se muestra sólamente algo tal que así:

{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff3150 7\deff0\stshfdbch0\stshfloch31506, etc...

además, sólo me descarga el primer fichero (además de descargarlo mal, como he comentado), cuando en realidad se han generado todos los documentos (1 por cada registro) en el servidor.

Aquí os pongo el código fuente:

$sql = "SELECT ....";
$res = mysqli_query($link,$sql);
while ($row = mysqli_fetch_array($res)){
$pedido_find = $row["pedido"];
$archivo = file_get_contents('plantilla_etiquetas.rtf');
$archivo = str_replace('tag_pedido',csv_encode_conv($pedido_f ind),$archivo);
file_put_contents('./etiquetas/et_doc_'.$num_documento_find.'_part_'.$partida_fin d.'.rtf',$archivo);
descargar('et_doc'.$num_documento_find.'_part_'.$p artida_find.'.rtf');
}

function descargar($archivo){
$ruta = './etiquetas/'.$archivo;
if (is_file($ruta))
{
//header ("Content-Type: application/octet-stream");
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$archivo);
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($ruta));

readfile($ruta);
}

//He probado a hacerlo sin usar esta función, pero nada, o usando ficheros .doc o .docx en lugar de .rtf pero nada

function csv_encode_conv($var, $enc='Windows-1252') {
$var = htmlentities($var, ENT_QUOTES, 'utf-8');
$var = html_entity_decode($var, ENT_QUOTES , $enc);
return $var;
}
  #9 (permalink)  
Antiguo 04/10/2013, 02:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Plantillas para Word en PHP

Por sentido común sólo puedes descargar un archivo a la vez, eso es fundamental que lo sepas.

Ahora, si el archivo descargado sale mal es porque posiblemente se corrompa cuando lo mandas a descargar, un simple espacio en blanco, salto de linea, o algo similar puede arruinar la información real del archivo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 04/10/2013, 03:08
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Plantillas para Word en PHP

Gracias por contestar,
entiendo que el código fuente es correcto y los errores que comentas que puede haber es dentro de la propia plantilla, ¿estoy en lo cierto?

Etiquetas: plantillas, sql, word
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:10.