Modificada la Clase InformePDF para poder hacer informes con varias tablas.
This commit is contained in:
rmontanana
2014-02-16 19:53:34 +01:00
parent 846ee5e393
commit 4e063b2ab5
5 changed files with 135 additions and 114 deletions

View File

@@ -214,6 +214,8 @@ class AportaContenido {
if ($this->perfil['Informe']) { if ($this->perfil['Informe']) {
$enlace = 'xml/informe' . ucfirst($opcion) . '.xml'; $enlace = 'xml/informe' . ucfirst($opcion) . '.xml';
$informe = new InformePDF($this->bdd, $enlace, $this->registrado); $informe = new InformePDF($this->bdd, $enlace, $this->registrado);
$informe->crea($enlace);
$informe->cierraPDF();
$informe->imprimeInforme(); $informe->imprimeInforme();
return; return;
} else { } else {

View File

@@ -52,8 +52,10 @@ class InformeInventario {
$plantilla = str_replace("{Descripcion}", utf8_encode($fila['Descripcion']), $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); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida);
$informe = new InformePDF($this->bdd, $salida, true); $informe = new InformePDF($this->bdd, $salida, true);
$informe->crea($salida);
$informe->cierraPDF();
$informe->guardaArchivo("tmp/Informe.pdf"); $informe->guardaArchivo("tmp/Informe.pdf");
echo '<script type="text/javascript"> window.open( "Informe.pdf" ) </script>'; echo '<script type="text/javascript"> window.open( "tmp/Informe.pdf" ) </script>';
} }
private function listarArticulo() { private function listarArticulo() {
@@ -72,8 +74,10 @@ class InformeInventario {
$plantilla = str_replace("{Modelo}", utf8_encode($fila['modelo']), $plantilla); $plantilla = str_replace("{Modelo}", utf8_encode($fila['modelo']), $plantilla);
file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida);
$informe = new InformePDF($this->bdd, $salida, true); $informe = new InformePDF($this->bdd, $salida, true);
$informe->crea($salida);
$informe->cierraPDF();
$informe->guardaArchivo("tmp/Informe.pdf"); $informe->guardaArchivo("tmp/Informe.pdf");
echo '<script type="text/javascript"> window.open( "Informe.pdf" ) </script>'; echo '<script type="text/javascript"> window.open( "tmp/Informe.pdf" ) </script>';
} }
private function listaUbicaciones() { 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 //Utiliza un nuevo manejador de base de datos para poder hacer una consulta en los informes
$bdatos = new Sql(SERVIDOR, USUARIO, CLAVE, BASEDATOS); $bdatos = new Sql(SERVIDOR, USUARIO, CLAVE, BASEDATOS);
$mezcla = new FPDF_Merge(); $primero = true;
$i = 0;
while ($fila = $this->bdd->procesaResultado()) { while ($fila = $this->bdd->procesaResultado()) {
//$fila=$this->bdd->procesaResultado(); //$fila=$this->bdd->procesaResultado();
$plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero); $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("{id}", $fila['id'], $plantilla);
$plantilla = str_replace("{Descripcion}", utf8_encode($fila['Descripcion']), $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); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida);
if ($primero) {
$primero = false;
$informe = new InformePDF($bdatos, $salida, true); $informe = new InformePDF($bdatos, $salida, true);
$nombre = "tmp/sal" . $i++ . ".pdf"; }
$informe->guardaArchivo($nombre); $informe->crea($salida);
$mezcla->add($nombre);
} }
$nombre = "tmp/total.pdf"; $nombre = "tmp/total.pdf";
$mezcla->output($nombre); $informe->cierraPDF();
$informe->imprimeInforme();
} }
} }

View File

@@ -1,5 +1,6 @@
<?php <?php
/** /**
* genera un documento PDF a partir de una descripción dada en un archivo XML * genera un documento PDF a partir de una descripción dada en un archivo XML
* @author Ricardo Montañana <rmontanana@gmail.com> * @author Ricardo Montañana <rmontanana@gmail.com>
@@ -24,89 +25,97 @@
* along with Inventario. If not, see <http://www.gnu.org/licenses/>. * along with Inventario. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
class InformePDF {
class InformePDF
{
/** /**
* *
* @var basedatos Controlador de la base de datos * @var basedatos Controlador de la base de datos
*/ */
private $bdd; private $bdd;
private $docu; 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 * 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 basedatos $bdd manejador de la base de datos
* @param string $definicion fichero con la definición del informe en XML * @param string $definicion fichero con la definición del informe en XML
* @param boolean $registrado usuario registrado si/no * @param boolean $registrado usuario registrado si/no
* @return ficheroPDF * @return ficheroPDF
* todo: cambiar este comentario
*/ */
public function __construct($bdd,$definicion,$registrado) public function __construct($bdd, $definicion, $registrado) {
{
if (!$registrado) { if (!$registrado) {
return 'Debe registrarse para acceder a este apartado'; return 'Debe registrarse para acceder a este apartado';
} }
$this->bdd=$bdd;
// Recuperamos la definición del informe // Recuperamos la definición del informe
$def=simplexml_load_file($definicion); $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(); //print_r($def);echo $bdd;die();
// Iniciamos la creación del documento // Iniciamos la creación del documento
$pdf=new Pdf_mysql_table($this->bdd->obtieneManejador(),(string)$def->Pagina['Orientacion'], $this->def = simplexml_load_file($definicion);
(string)$def->Pagina['Formato'], $this->pdf->setTitulo($this->def->Titulo['Texto']);
(string)$def->Titulo['Texto'],(string)$def->Pagina->Cabecera); $this->pdf->iniciaTotales();
echo $def->Titulo.$def->Cabecera; $this->bdd->ejecuta(trim($this->def->Datos->Consulta));
$pdf->Open(); //$filas = $this->bdd->procesaResultado();
$pdf->setAuthor(utf8_decode(AUTOR)); $this->pdf->AddPage();
$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 // Recuperamos los datos del cuerpo
foreach($def->Pagina->Cuerpo->Col as $columna) { foreach ($this->def->Pagina->Cuerpo->Col as $columna) {
$pdf->AddCol((string)$columna['Nombre'],(string)$columna['Ancho'], $this->pdf->AddCol((string) $columna['Nombre'], (string) $columna['Ancho'], (string) $columna['Titulo'], (string) $columna['Ajuste'], (string) $columna['Total']);
(string)$columna['Titulo'],(string)$columna['Ajuste'],
(string)$columna['Total']);
} }
$prop = array('HeaderColor' => array(255, 150, 100), $prop = array('HeaderColor' => array(255, 150, 100),
'color1' => array(210, 245, 255), 'color1' => array(210, 245, 255),
'color2' => array(255, 255, 210), 'color2' => array(255, 255, 210),
'padding' => 2); 'padding' => 2);
$pdf->Table($def->Datos->Consulta,$prop); $this->pdf->Table($this->def->Datos->Consulta, $prop);
$pdf->Close();
// Obtenemos el documento y su longitud
$documento=$pdf->Output('','S');
$this->docu=$documento;
} }
public function getContenido()
{ public function cierraPDF() {
$this->pdf->Close();
$this->docu = $this->pdf->Output('', 'S');
}
public function getContenido() {
return $this->docu; return $this->docu;
} }
public function getCabecera()
{ public function getCabecera() {
$cabecera = "Content-type: application/pdf"; $cabecera = "Content-type: application/pdf";
$cabecera = $cabecera . "Content-length: " . strlen($this->docu); $cabecera = $cabecera . "Content-length: " . strlen($this->docu);
$cabecera = $cabecera . "Content-Disposition: inline; filename=Informe.pdf"; $cabecera = $cabecera . "Content-Disposition: inline; filename=tmp/Informe.pdf";
return $cabecera; return $cabecera;
} }
public function guardaArchivo($nombre = "tmp/Informe.pdf")
{ public function guardaArchivo($nombre = "tmp/Informe.pdf") {
$fichero = fopen($nombre, "w"); $fichero = fopen($nombre, "w");
fwrite($fichero, $this->getCabecera()); fwrite($fichero, $this->getCabecera());
fwrite($fichero, $this->getContenido(), strlen($this->getContenido())); fwrite($fichero, $this->getContenido(), strlen($this->getContenido()));
fclose($fichero); fclose($fichero);
} }
public function enviaCabecera()
{ public function enviaCabecera() {
header("Content-type: application/pdf"); header("Content-type: application/pdf");
$longitud = strlen($this->docu); $longitud = strlen($this->docu);
header("Content-length: $longitud"); header("Content-length: $longitud");
header("Content-Disposition: inline; filename=Informe.pdf"); header("Content-Disposition: inline; filename=tmp/Informe.pdf");
} }
public function imprimeInforme()
{ public function imprimeInforme() {
$this->enviaCabecera(); $this->enviaCabecera();
echo $this->docu; echo $this->docu;
} }
} }
?> ?>

View File

@@ -127,6 +127,8 @@ class Inventario {
$enlace = 'xml/informe' . ucfirst($opcion) . '.xml'; $enlace = 'xml/informe' . ucfirst($opcion) . '.xml';
//$enlace="tmp/inventarioUbicacion.xml"; //$enlace="tmp/inventarioUbicacion.xml";
$informe = new InformePDF($this->bdd, $enlace, $this->registrado); $informe = new InformePDF($this->bdd, $enlace, $this->registrado);
$informe->crea($enlace);
$informe->cierraPDF();
$informe->imprimeInforme(); $informe->imprimeInforme();
return; return;
default: default:

View File

@@ -51,7 +51,10 @@ class Pdf_mysql_table extends Fpdf
{ {
$this->titulo=$titulo; $this->titulo=$titulo;
} }
public function iniciaTotales()
{
$this->totales = array();
}
function Header() function Header()
{ {
//Modficada por Ricardo Montañana //Modficada por Ricardo Montañana