PHP - Tabla html en reporte pdf

   
Vista:

Tabla html en reporte pdf

Publicado por Pedro (7 intervenciones) el 21/01/2013 22:36:05
Saludos, tengo un problema, quiero mostrar un reporte pdf, ultilizo la libreria mpdf que fue la que mejor se adapto a mi por su capacidad para leer html, todo genial hasta la parte en que tuve que hacer una tabular con un for, alli dejo de reconocerme el codigo html y ya no sale nada. Lo imprimo con echo y si se muestra correctamente, sin embargo cuando lo pongo dentro del for deja de mostrar resultado alguno. Por favor alguien tiene idea de como hacer para que reconozca mi instruccion, tal vez alguna que otra libreria mejor?

PD: Adjunto el codigo fuente






---------CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<?php
//cadena de conexion
//seleccionar base de datos
 
 
 
 
 
$cabecera = "<center><span><b>Mi primer documento PDF dinámico con mPDF</b></span></center>";
 
$cuerpo = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<title>Documento sin título</title>
</head>
 
<body>
 
 
 
</body>
</html>";

$sql="declare @IdAnexo int
set @IdAnexo=311554
 
SELECT     dbo.Documento.FechaEmision, dbo.DocumentoTipo.CodDocumentoTipo,
                      CASE WHEN Documento.IdDocumento = 0 THEN Documento.CodDocumento ELSE CASE WHEN Documento.IdDocumentoSerie <> 0 THEN DocumentoSerie.CodDocumentoSerie
                       + '-' ELSE ISNULL(Documento.SerieDocumento + '-', '') END + Documento.CodDocumento END AS CodDocumento,
                      CASE WHEN IdAnexo_Emisor = 0 THEN NULL ELSE Anexo_Emisor.CodAnexoVenta END AS CodAnexo_Emisor,
                      CASE WHEN IdAnexo_Concesionario = 0 THEN NULL ELSE Anexo_Concesionario.CodAnexo END AS CodAnexo_Concesionario,
                      CASE WHEN dbo.Documento.IdAnexo_Concesionario <> 0 THEN Anexo_Concesionario.NomAnexo ELSE CASE WHEN dbo.Documento.IdAnexo_Emisor <>
                       0 THEN Anexo_Emisor.NomAnexo ELSE CASE WHEN dbo.Documento.Referencia IS NULL OR
                      dbo.Documento.Referencia = '' THEN dbo.DocumentoTipo.NomDocumentoTipo ELSE dbo.Documento.Referencia END END END AS Descripcion,
                      CASE WHEN dbo.DocumentoTipo.EsInverso = 1 THEN - dbo.funObtenerMontoRestanteDocumentoCuota(dbo.Documento.IdDocumento,
                      dbo.DocumentoCuota.NroCuota, dbo.CreditoPeriodo.FechaInicio) ELSE dbo.funObtenerMontoRestanteDocumentoCuota(dbo.Documento.IdDocumento,
                      dbo.DocumentoCuota.NroCuota, dbo.CreditoPeriodo.FechaInicio) END AS Importe,
                      CASE WHEN (dbo.DocumentoCuota.MontoCuota - dbo.DocumentoCuota.MontoCuotaCancelado)
                      = 0 THEN dbo.Documento.NroCuota - dbo.DocumentoCuota.NroCuota ELSE dbo.Documento.NroCuota - dbo.DocumentoCuota.NroCuota + 1 END AS NroCuota,
                       CASE WHEN dbo.DocumentoTipo.EsInverso = 1 THEN - (dbo.DocumentoCuota.MontoCuota - dbo.DocumentoCuota.MontoCuotaCancelado)
                      ELSE (dbo.DocumentoCuota.MontoCuota - dbo.DocumentoCuota.MontoCuotaCancelado) END AS MontoCuota, 1 AS Tipo,
                      dbo.Documento.FechaEmision AS FechaOrden
FROM         dbo.Documento  (NOLOCK)  INNER JOIN
                      dbo.DocumentoCuota (NOLOCK)  ON dbo.Documento.IdDocumento = dbo.DocumentoCuota.IdDocumento INNER JOIN
                      dbo.DocumentoTipo (NOLOCK)  ON CASE WHEN Documento.IdDocumentoTipo = dbo.fneIdDocumentoTipo('TRDA') THEN Documento.IdDocumentoTipo_Referencia ELSE Documento.IdDocumentoTipo END  = dbo.DocumentoTipo.IdDocumentoTipo INNER JOIN
                      dbo.DocumentoSerie (NOLOCK)  ON dbo.Documento.IdDocumentoSerie = dbo.DocumentoSerie.IdDocumentoSerie INNER JOIN
                      dbo.Anexo Anexo_Concesionario  (NOLOCK)  ON dbo.Documento.IdAnexo_Concesionario = Anexo_Concesionario.IdAnexo INNER JOIN
                      dbo.Anexo Anexo_Emisor (NOLOCK)  ON dbo.Documento.IdAnexo_Emisor = Anexo_Emisor.IdAnexo INNER JOIN
                      dbo.CreditoPeriodo (NOLOCK)  ON dbo.Documento.FechaEmision < dbo.CreditoPeriodo.FechaInicio
 INNER JOIN
                      dbo.DocumentoTipoFamiliaTD(NOLOCK)  ON dbo.DocumentoTipo.IdDocumentoTipoFamilia = dbo.DocumentoTipoFamiliaTD.IdDocumentoTipoFamilia
WHERE     (dbo.Documento.Total - dbo.Documento.MontoCancelado + dbo.DocumentoCuota.MontoCuota - dbo.DocumentoCuota.MontoCuotaCancelado <> 0) AND
                      (dbo.CreditoPeriodo.IdCreditoPeriodo = dbo.fneCreditoPeriodo(GETDATE(), 1)) AND (dbo.Documento.IdAnexo_ClienteProveedor = @IdAnexo) AND
                      (dbo.DocumentoCuota.FechaVencimiento BETWEEN dbo.CreditoPeriodo.FechaInicio AND dbo.CreditoPeriodo.FechaFin) AND (dbo.Documento.IdEstado not in (dbo.funObtenerEstado('CANCELADO') , dbo.funObtenerEstado('ANULADO'))) AND (dbo.DocumentoTipoFamiliaTD.CodDocumentoTipoFamilia IN ('OV' , 'CV', 'NV', 'CCL'))
UNION ALL
SELECT     NULL AS FechaEmision, NULL AS CodDocumentoTipo, NULL AS CodDocumento, NULL AS CodAnexo_Emisor, NULL AS CodAnexo_Concesionario, NULL
                      AS Descripcion, NULL AS Importe, NULL AS NroCuota, NULL AS MontoCuota, 2 AS Tipo, FechaInicio AS FechaOrden
FROM         dbo.CreditoPeriodo (NOLOCK)
WHERE     (IdCreditoPeriodo = dbo.fneCreditoPeriodo(GETDATE(), 1))
UNION ALL
SELECT     dbo.Documento.FechaEmision, dbo.DocumentoTipo.CodDocumentoTipo,
                      CASE WHEN Documento.IdDocumento = 0 THEN Documento.CodDocumento ELSE CASE WHEN Documento.IdDocumentoSerie <> 0 THEN DocumentoSerie.CodDocumentoSerie
                       + '-' ELSE ISNULL(Documento.SerieDocumento + '-', '') END + Documento.CodDocumento END AS CodDocumento,
                      CASE WHEN IdAnexo_Emisor = 0 THEN NULL ELSE Anexo_Emisor.CodAnexoVenta END AS CodAnexo_Emisor,
                      CASE WHEN IdAnexo_Concesionario = 0 THEN NULL ELSE Anexo_Concesionario.CodAnexo END AS CodAnexo_Concesionario,
                      dbo.DocumentoProducto.Descripcion,
                      CASE WHEN dbo.DocumentoTipo.EsInverso = 1 THEN - fntDocumentoCuotaProducto_Importe.Importe ELSE fntDocumentoCuotaProducto_Importe.Importe
                       END AS Importe,
                      CASE WHEN dbo.DocumentoCuotaProducto.MontoCuota - dbo.DocumentoCuotaProducto.MontoCuotaCancelado = 0 THEN dbo.Documento.NroCuota - 1 ELSE
                       dbo.Documento.NroCuota END AS NroCuota,
                      CASE WHEN dbo.DocumentoTipo.EsInverso = 1 THEN - (dbo.DocumentoCuotaProducto.MontoCuota - dbo.DocumentoCuotaProducto.MontoCuotaCancelado)
                       ELSE (dbo.DocumentoCuotaProducto.MontoCuota - dbo.DocumentoCuotaProducto.MontoCuotaCancelado) END AS MontoCuota, 3 AS Tipo,
                      dbo.Documento.FechaEmision AS FechaOrden
FROM         dbo.DocumentoProducto WITH (NOLOCK) INNER JOIN
                      dbo.Documento WITH (NOLOCK) INNER JOIN
                      dbo.DocumentoCuota WITH (NOLOCK) ON dbo.Documento.IdDocumento = dbo.DocumentoCuota.IdDocumento INNER JOIN
                      dbo.DocumentoTipo WITH (NOLOCK) ON CASE WHEN Documento.IdDocumentoTipo = dbo.fneIdDocumentoTipo('TRDA')
                      THEN Documento.IdDocumentoTipo_Referencia ELSE Documento.IdDocumentoTipo END = dbo.DocumentoTipo.IdDocumentoTipo INNER JOIN
                      dbo.DocumentoSerie WITH (NOLOCK) ON dbo.Documento.IdDocumentoSerie = dbo.DocumentoSerie.IdDocumentoSerie INNER JOIN
                      dbo.Anexo Anexo_Concesionario ON dbo.Documento.IdAnexo_Concesionario = Anexo_Concesionario.IdAnexo INNER JOIN
                      dbo.Anexo Anexo_Emisor ON dbo.Documento.IdAnexo_Emisor = Anexo_Emisor.IdAnexo INNER JOIN
                      dbo.DocumentoCuotaProducto WITH (NOLOCK) ON dbo.DocumentoCuota.IdDocumentoCuota = dbo.DocumentoCuotaProducto.IdDocumentoCuota ON
                      dbo.DocumentoProducto.IdDocumentoProducto = dbo.DocumentoCuotaProducto.IdDocumentoProducto INNER JOIN
                      dbo.fntDocumentoCuotaProducto_Importe(@IdAnexo) fntDocumentoCuotaProducto_Importe ON
                      dbo.DocumentoProducto.IdDocumentoProducto =                      fntDocumentoCuotaProducto_Importe.IdDocumentoProducto CROSS JOIN
                      dbo.CreditoPeriodo WITH (NOLOCK) INNER JOIN
                      dbo.DocumentoTipoFamiliaTD WITH (NOLOCK) ON
                      dbo.DocumentoTipo.IdDocumentoTipoFamilia = dbo.DocumentoTipoFamiliaTD.IdDocumentoTipoFamilia
WHERE     (dbo.CreditoPeriodo.IdCreditoPeriodo = dbo.fneCreditoPeriodo(GETDATE(), 1)) AND (dbo.Documento.IdAnexo_ClienteProveedor = @Idanexo) AND
                      (dbo.Documento.FechaEmision BETWEEN dbo.CreditoPeriodo.FechaInicio AND dbo.CreditoPeriodo.FechaFin) AND (dbo.DocumentoCuota.NroCuota = 1)
                      AND (dbo.Documento.IdEstado NOT IN (dbo.funObtenerEstado('CANCELADO'), dbo.funObtenerEstado('ANULADO'))) AND
                      (dbo.DocumentoTipoFamiliaTD.CodDocumentoTipoFamilia IN ('OV', 'CV', 'NV', 'CCL')) AND
                      (fntDocumentoCuotaProducto_Importe.Importe + dbo.DocumentoCuotaProducto.MontoCuota - dbo.DocumentoCuotaProducto.MontoCuotaCancelado <> 0)
ORDER BY FechaOrden, Tipo, CodDocumento
 
";
$result= mssql_query($sql);

/* Desplegamos cada uno de los registros dentro de una tabla */  
$cuerpo .= "<table  width='785'>";

/*Priemro los encabezados*/
 $cuerpo .= "<tr>
       <td colspan='9' align='center'>DETALLE DE DOCUMENTOS DE VENTA</td></tr>
	  <tr> <td>Fecha</td>
	   <td>Nta. Venta</td>
	   <td>Tipo</td>
	   <td>PVenta</td>
	   <td>Conces</td>
	   <td>Descripcion</td>
	   <td>Importe</td>
	   <td>Ctas</td>
	   <td>Dscto Proyec</td>
      </tr>";

/*Y ahora todos los registros */

for($i=1;$row2 = mysql_fetch_row($result);$i++){
	$cuerpo .= "<tr>
 
	   <td>".$row2['FechaEmision']."</td>
	   <td>".$row2['CodDocumento']."</td>
	   <td>".$row2['CodDocumentoTipo']."</td>
	   <td>".$row2['CodAnexo_Emisor']."</td>
	   <td>".$row2['CodAnexo_Concesionario']."</td>
	   <td>".$row2['Descripcion']."</td>
	   <td>".$row2['Importe']."</td>
	   <td>".$row2['NroCuota']."</td>
	   <td>".$row2['MontoCuota']."</td>
      </tr>";
}
$cuerpo .= "</table>";

/*
while($row2=mssql_fetch_array($result))
{
 $cuerpo .= "<tr>
 
	   <td>".$row2['FechaEmision']."</td>
	   <td>".$row2['CodDocumento']."</td>
	   <td>".$row2['CodDocumentoTipo']."</td>
	   <td>".$row2['CodAnexo_Emisor']."</td>
	   <td>".$row2['CodAnexo_Concesionario']."</td>
	   <td>".$row2['Descripcion']."</td>
	   <td>".$row2['Importe']."</td>
	   <td>".$row2['NroCuota']."</td>
	   <td>".$row2['MontoCuota']."</td>
      </tr>";
}
$cuerpo .= "</table>";

*/


  echo $cuerpo;

include("mpdf/mpdf.php");
$mpdf=new mPDF('a4','a4','8');

$mpdf->SetMargins(1,1.5,2.5);
$mpdf->WriteHTML($cuerpo);
$mpdf->Output();

?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Tabla html en reporte pdf

Publicado por Alexis Ochoa (92 intervenciones) el 21/01/2013 23:31:24
Generalmente estas librerías extienden de FPDF y ésta no permite que exista alguna salida a pantalla previo a la generación del pdf.

Entonces lo que se me ocurre es lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
ob_star();
echo $cuerpo;
$content = ob_get_contents();
ob_end_clean();
 
include("mpdf/mpdf.php");
$mpdf=new mPDF('a4','a4','8');
 
$mpdf->SetMargins(1,1.5,2.5);
$mpdf->WriteHTML($content);
$mpdf->Output();


Basicamente lo que hace esto es capturar el flujo de salida por pantalla, almacenarlo en una variable y luego esta enviarla a la libreria mpdf. De esta forma, se evita que PHP "escriba" en pantalla.

Una vez realize algo parecido y funcionó pero ese código ya no lo tengo y ultimamente he utilizado FPDF, que para mí es mejor.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tabla html en reporte pdf

Publicado por Pedro (7 intervenciones) el 22/01/2013 00:26:23
Sorry, no me funciono, me seigue mostrando en blanco esa parte, mismo caso le doy echo e imprime, pero cuando lo meto en el pdf suena :( Pls Ayuda!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tabla html en reporte pdf

Publicado por Alexis Ochoa (92 intervenciones) el 22/01/2013 02:50:44
No se si te diste cuenta, pero tuve un error en el tipeo. La primera funcion es ob_start()

1
2
3
4
5
6
7
8
9
10
11
ob_start();
echo $cuerpo;
$content = ob_get_contents();
ob_end_clean();
 
include("mpdf/mpdf.php");
$mpdf=new mPDF('a4','a4','8');
 
$mpdf->SetMargins(1,1.5,2.5);
$mpdf->WriteHTML($content);
$mpdf->Output();


A ver si así funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tabla html en reporte pdf

Publicado por Pedro (7 intervenciones) el 22/01/2013 14:10:24
si lo corregi, igual no funciono
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tabla html en reporte pdf

Publicado por Pedro (7 intervenciones) el 22/01/2013 21:11:08
Disculpen las molestias, yo estaba en un error pq ponia la etiqueta table fuera de la etiqueta html . Gracias por tu respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tabla html en reporte pdf

Publicado por Alexis Ochoa (92 intervenciones) el 23/01/2013 00:10:25
jajaja también lo ví pero no pensé que influyera xD

Al final te funcionó con lo que te pasé o como ya lo tenías? Es por si a alguien más le pasa lo mismo

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar