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

<?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