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.
crear word rtf con php

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.

(Visited 2.947 times, 3 visits today)
Puedes saltar al final y dejar una respuesta. Hacer ping no está permitido actualmente.