From 4e063b2ab5bd58c3171e36f96e6e177a5f21f2ad Mon Sep 17 00:00:00 2001 From: rmontanana Date: Sun, 16 Feb 2014 19:53:34 +0100 Subject: [PATCH] resolves #2 Modificada la Clase InformePDF para poder hacer informes con varias tablas. --- AportaContenido.php | 2 + InformeInventario.php | 23 +++-- InformePDF.php | 217 ++++++++++++++++++++++-------------------- Inventario.php | 2 + Pdf_mysql_table.php | 5 +- 5 files changed, 135 insertions(+), 114 deletions(-) diff --git a/AportaContenido.php b/AportaContenido.php index 34ff22e..d6b1be4 100644 --- a/AportaContenido.php +++ b/AportaContenido.php @@ -214,6 +214,8 @@ class AportaContenido { if ($this->perfil['Informe']) { $enlace = 'xml/informe' . ucfirst($opcion) . '.xml'; $informe = new InformePDF($this->bdd, $enlace, $this->registrado); + $informe->crea($enlace); + $informe->cierraPDF(); $informe->imprimeInforme(); return; } else { diff --git a/InformeInventario.php b/InformeInventario.php index c7a265b..1a41c07 100644 --- a/InformeInventario.php +++ b/InformeInventario.php @@ -52,8 +52,10 @@ class InformeInventario { $plantilla = str_replace("{Descripcion}", utf8_encode($fila['Descripcion']), $plantilla); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida); $informe = new InformePDF($this->bdd, $salida, true); + $informe->crea($salida); + $informe->cierraPDF(); $informe->guardaArchivo("tmp/Informe.pdf"); - echo ''; + echo ''; } private function listarArticulo() { @@ -72,8 +74,10 @@ class InformeInventario { $plantilla = str_replace("{Modelo}", utf8_encode($fila['modelo']), $plantilla); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida); $informe = new InformePDF($this->bdd, $salida, true); + $informe->crea($salida); + $informe->cierraPDF(); $informe->guardaArchivo("tmp/Informe.pdf"); - echo ''; + echo ''; } private function listaUbicaciones() { @@ -135,21 +139,22 @@ class InformeInventario { } //Utiliza un nuevo manejador de base de datos para poder hacer una consulta en los informes $bdatos = new Sql(SERVIDOR, USUARIO, CLAVE, BASEDATOS); - $mezcla = new FPDF_Merge(); - $i = 0; + $primero = true; while ($fila = $this->bdd->procesaResultado()) { //$fila=$this->bdd->procesaResultado(); $plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero); $plantilla = str_replace("{id}", $fila['id'], $plantilla); $plantilla = str_replace("{Descripcion}", utf8_encode($fila['Descripcion']), $plantilla); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida); - $informe = new InformePDF($bdatos, $salida, true); - $nombre = "tmp/sal" . $i++ . ".pdf"; - $informe->guardaArchivo($nombre); - $mezcla->add($nombre); + if ($primero) { + $primero = false; + $informe = new InformePDF($bdatos, $salida, true); + } + $informe->crea($salida); } $nombre = "tmp/total.pdf"; - $mezcla->output($nombre); + $informe->cierraPDF(); + $informe->imprimeInforme(); } } diff --git a/InformePDF.php b/InformePDF.php index 01c2624..722c059 100644 --- a/InformePDF.php +++ b/InformePDF.php @@ -1,112 +1,121 @@ - * @version 1.0 - * @package Inventario - * @copyright Copyright (c) 2008, Ricardo Montañana - * @package Inventario - * @copyright Copyright (c) 2008, Ricardo Montañana Gómez - * @license http://www.gnu.org/licenses/gpl-3.0.txt - * This file is part of Inventario. - * Inventario is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Inventario is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Inventario. If not, see . - * - */ - class InformePDF - { +/** + * genera un documento PDF a partir de una descripción dada en un archivo XML + * @author Ricardo Montañana + * @version 1.0 + * @package Inventario + * @copyright Copyright (c) 2008, Ricardo Montañana + * @package Inventario + * @copyright Copyright (c) 2008, Ricardo Montañana Gómez + * @license http://www.gnu.org/licenses/gpl-3.0.txt + * This file is part of Inventario. + * Inventario is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Inventario is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Inventario. If not, see . + * + */ +class InformePDF { + /** - * - * @var basedatos Controlador de la base de datos - */ - private $bdd; - private $docu; + * + * @var basedatos Controlador de la base de datos + */ + private $bdd; + private $docu; + private $pdf; + private $def; + /** - * El constructor recibe como argumento el nombre del archivo XML con la definición, encargándose de recuperarla y guardar toda la información localmente - * @param basedatos $bdd manejador de la base de datos - * @param string $definicion fichero con la definición del informe en XML - * @param boolean $registrado usuario registrado si/no - * @return ficheroPDF - */ - public function __construct($bdd,$definicion,$registrado) - { - if (!$registrado) { - return 'Debe registrarse para acceder a este apartado'; - } - $this->bdd=$bdd; - // Recuperamos la definición del informe - $def=simplexml_load_file($definicion); - //print_r($def);echo $bdd;die(); - // Iniciamos la creación del documento - $pdf=new Pdf_mysql_table($this->bdd->obtieneManejador(),(string)$def->Pagina['Orientacion'], - (string)$def->Pagina['Formato'], - (string)$def->Titulo['Texto'],(string)$def->Pagina->Cabecera); - echo $def->Titulo.$def->Cabecera; - $pdf->Open(); - $pdf->setAuthor(utf8_decode(AUTOR)); - $pdf->setCreator(html_entity_decode(APLICACION)); - $pdf->setSubject(utf8_decode($def->Titulo)); - $pdf->setAutoPageBreak(true,10); - $this->bdd->ejecuta(trim($def->Datos->Consulta)); - $filas=$this->bdd->procesaResultado(); - $pdf->AddPage(); - // Recuperamos los datos del cuerpo - foreach($def->Pagina->Cuerpo->Col as $columna) { - $pdf->AddCol((string)$columna['Nombre'],(string)$columna['Ancho'], - (string)$columna['Titulo'],(string)$columna['Ajuste'], - (string)$columna['Total']); - } - $prop=array('HeaderColor'=>array(255,150,100), - 'color1'=>array(210,245,255), - 'color2'=>array(255,255,210), - 'padding'=>2); - $pdf->Table($def->Datos->Consulta,$prop); - $pdf->Close(); - // Obtenemos el documento y su longitud - $documento=$pdf->Output('','S'); - $this->docu=$documento; - } - public function getContenido() - { - return $this->docu; - } - public function getCabecera() - { - $cabecera = "Content-type: application/pdf"; - $cabecera = $cabecera . "Content-length: " . strlen($this->docu); - $cabecera = $cabecera . "Content-Disposition: inline; filename=Informe.pdf"; - return $cabecera; - } - public function guardaArchivo($nombre = "tmp/Informe.pdf") - { - $fichero = fopen($nombre, "w"); - fwrite($fichero,$this->getCabecera()); - fwrite($fichero,$this->getContenido(), strlen($this->getContenido())); - fclose($fichero); - } - public function enviaCabecera() - { - header("Content-type: application/pdf"); - $longitud=strlen($this->docu); - header("Content-length: $longitud"); - header("Content-Disposition: inline; filename=Informe.pdf"); - } - public function imprimeInforme() - { - $this->enviaCabecera(); - echo $this->docu; + * El constructor recibe como argumento el nombre del archivo XML con la definición, encargándose de recuperarla y guardar toda la información localmente + * @param basedatos $bdd manejador de la base de datos + * @param string $definicion fichero con la definición del informe en XML + * @param boolean $registrado usuario registrado si/no + * @return ficheroPDF + * todo: cambiar este comentario + */ + public function __construct($bdd, $definicion, $registrado) { + if (!$registrado) { + return 'Debe registrarse para acceder a este apartado'; } + // Recuperamos la definición del informe + $this->def = simplexml_load_file($definicion); + $this->bdd = $bdd; + $this->pdf = new Pdf_mysql_table($this->bdd->obtieneManejador(), (string) $this->def->Pagina['Orientacion'], (string) $this->def->Pagina['Formato'], (string) $this->def->Titulo['Texto'], (string) $this->def->Pagina->Cabecera); + //echo $def->Titulo.$def->Cabecera; + $this->pdf->Open(); + $this->pdf->setAuthor(utf8_decode(AUTOR)); + $this->pdf->setCreator(html_entity_decode(APLICACION)); + $this->pdf->setSubject(utf8_decode($this->def->Titulo)); + $this->pdf->setAutoPageBreak(true, 10); } + + public function crea($definicion) { + + //print_r($def);echo $bdd;die(); + // Iniciamos la creación del documento + $this->def = simplexml_load_file($definicion); + $this->pdf->setTitulo($this->def->Titulo['Texto']); + $this->pdf->iniciaTotales(); + $this->bdd->ejecuta(trim($this->def->Datos->Consulta)); + //$filas = $this->bdd->procesaResultado(); + $this->pdf->AddPage(); + // Recuperamos los datos del cuerpo + foreach ($this->def->Pagina->Cuerpo->Col as $columna) { + $this->pdf->AddCol((string) $columna['Nombre'], (string) $columna['Ancho'], (string) $columna['Titulo'], (string) $columna['Ajuste'], (string) $columna['Total']); + } + $prop = array('HeaderColor' => array(255, 150, 100), + 'color1' => array(210, 245, 255), + 'color2' => array(255, 255, 210), + 'padding' => 2); + $this->pdf->Table($this->def->Datos->Consulta, $prop); + } + + public function cierraPDF() { + $this->pdf->Close(); + $this->docu = $this->pdf->Output('', 'S'); + } + + public function getContenido() { + return $this->docu; + } + + public function getCabecera() { + $cabecera = "Content-type: application/pdf"; + $cabecera = $cabecera . "Content-length: " . strlen($this->docu); + $cabecera = $cabecera . "Content-Disposition: inline; filename=tmp/Informe.pdf"; + return $cabecera; + } + + public function guardaArchivo($nombre = "tmp/Informe.pdf") { + $fichero = fopen($nombre, "w"); + fwrite($fichero, $this->getCabecera()); + fwrite($fichero, $this->getContenido(), strlen($this->getContenido())); + fclose($fichero); + } + + public function enviaCabecera() { + header("Content-type: application/pdf"); + $longitud = strlen($this->docu); + header("Content-length: $longitud"); + header("Content-Disposition: inline; filename=tmp/Informe.pdf"); + } + + public function imprimeInforme() { + $this->enviaCabecera(); + echo $this->docu; + } + +} + ?> diff --git a/Inventario.php b/Inventario.php index 06b3b3c..1219861 100644 --- a/Inventario.php +++ b/Inventario.php @@ -127,6 +127,8 @@ class Inventario { $enlace = 'xml/informe' . ucfirst($opcion) . '.xml'; //$enlace="tmp/inventarioUbicacion.xml"; $informe = new InformePDF($this->bdd, $enlace, $this->registrado); + $informe->crea($enlace); + $informe->cierraPDF(); $informe->imprimeInforme(); return; default: diff --git a/Pdf_mysql_table.php b/Pdf_mysql_table.php index ae9ec2f..01fac68 100644 --- a/Pdf_mysql_table.php +++ b/Pdf_mysql_table.php @@ -51,7 +51,10 @@ class Pdf_mysql_table extends Fpdf { $this->titulo=$titulo; } - + public function iniciaTotales() + { + $this->totales = array(); + } function Header() { //Modficada por Ricardo Montañana