Foros del Web » Programando para Internet » PHP »

generar una factura en pdf desde Php

Estas en el tema de generar una factura en pdf desde Php en el foro de PHP en Foros del Web. Muy buenas a tod@s Gracias de antemano a la gente que dedica parte de su tiempo a resolvernos las dudas que tenemos. mi problema reside ...
  #1 (permalink)  
Antiguo 23/08/2014, 04:56
 
Fecha de Ingreso: julio-2007
Mensajes: 23
Antigüedad: 16 años, 8 meses
Puntos: 0
generar una factura en pdf desde Php

Muy buenas a tod@s
Gracias de antemano a la gente que dedica parte de su tiempo a resolvernos las dudas que tenemos.
mi problema reside en que estoy haciendo una factura en pdf en la que se listan los diferentes pedidos de los clientes estoy usando la libreria FPDF.
el problema que tengo si tengo más de un pedido(varios articulos) por cliente no soy capaz
de generar el contenido en mi PDF.sé que alguna consulta la hago mal :(

tengo las siguientes tablas de BD con los siguientes campos:
+customers (clientes):
customerid dni name address city state zip country
donde customerid(clave primaria:1,2,3,....)
+ orders:
orderid(PK) customerid(Fk) ship_nif date order_status ship_name ship_address ship_city ship_state ship_zip ship_country
+orders_items():
orderitems(PK) orderid(FK) isbn item_price quantity

os pongo el código para la programación de la factura en PDF:
Código PHP:
   define('FPDF_FONTPATH','font/');
    require(
'./fpdf/mysql_table.php');
    include(
"./fpdf/comunes.php");
    include (
"./funciones/fechas.php");
    
$c=mysql_pconnect("localhost""""");
    if (!
$c)
      die( 
'Error'mysql_error() );
    
mysql_select_db("db",$c) or die(mysql_error());

    
//declarar el importe del IVA
    
$iva="21";
    
    
$pdf=new PDF();
    
$pdf->Open();
    
$pdf->AddPage();
    
$pdf->Ln(10);

    
$codfactura=$_POST["codcliente"];

    
$query="select * from orders where customerid='$codfactura'";
    
$r=mysql_query($query,$c) or die (mysql_error());
    
$datos=mysql_fetch_array($r);
    
//var_dump($datos);die;
   
    
$consulta "Select * from orders,order_items where orders.customerid=$codfactura and orders.orderid = order_items.orderid ";
    
$resultado=mysql_query($consulta,$c) or die (mysql_error());
    
$lafila=mysql_fetch_array($resultado);
  
     
//definir  las celdas para rellenar los datos del cliente
    
$pdf->Cell(95);
    
$pdf->Cell(80,4,"",'',0,'C');
    
$pdf->Ln(4);

    
$pdf->SetFillColor(255,255,255);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','B',10);

    
$pdf->Cell(40,65,'Datos del Cliente');
    
$pdf->SetX(10);

    
$pdf->Cell(95);
    
$pdf->Cell(80,4,"",'LRT',0,'L',1);
    
$pdf->Ln(4);

    
$pdf->Cell(95);
    
$pdf->Cell(80,4,$lafila["ship_name"],'LR',0,'L',1);
    
$pdf->Ln(4);

    
$pdf->Cell(95);
    
$pdf->Cell(80,4,$lafila["ship_address"],'LR',0,'L',1);
    
$pdf->Ln(4);
    
    
$pdf->Cell(95);
    
$pdf->Cell(80,4,$lafila["ship_zip"],'LR',0,'L',1);
    
$pdf->Ln(4);
    
    
$pdf->Cell(95);
    
$pdf->Cell(80,4,$lafila["ship_city"],'LR',0,'L',1);
    
$pdf->Ln(4);
    
    
$pdf->Cell(95);
    
$pdf->Cell(80,4,$lafila["ship_country"],'LR',0,'L',1);
    
$pdf->Ln(4);

    
$pdf->Cell(95);
    
$pdf->Cell(80,4,"",'LRB',0,'L',1);
    
$pdf->Ln(10);

    
$pdf->SetFillColor(255,191,116);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','B',8);
    
    
$pdf->Cell(80);
    
$pdf->SetFillColor(255,255,255);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','',8);
    
    
$fecha implota($datos["date"]);
    
    
$pdf->Cell(30,4,$lafila["ship_nif"],1,0,'C',1);
    
$pdf->Cell(30,4,$lafila["customerid"],1,0,'C',1);
    
$pdf->Cell(30,4,$fecha,1,0,'C',1);
    
$pdf->Cell(20,4,$lafila["orderid"],1,0,'C',1);


    
    
//ahora mostramos las lineas de la factura
    // donde no consigo mostar
    
$pdf->Ln(10);
    
$pdf->Cell(1);

    
$pdf->SetFillColor(255,191,116);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','B',8);
    

    
        
$pdf->Cell(40,4,"Autor",1,0,'C',1);
    
$pdf->Cell(80,4,"Titulo",1,0,'C',1);
    
$pdf->Cell(20,4,"Precio",1,0,'C',1);
    
$pdf->Cell(15,4,"Cantidad",1,0,'C',1);

    
$pdf->Ln(4);


    
$pdf->SetFillColor(224,235,255);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','',8);
    
    
$pdf->Cell(80);
    
$pdf->Cell(30,4,"dni",1,0,'C',1);
    
$pdf->Cell(30,4,"customerid",1,0,'C',1);
    
$pdf->Cell(30,4,"Fecha",1,0,'C',1);
    
$pdf->Cell(20,4,"orderid",1,0,'C',1);
    
$pdf->Ln(4); 
  #2 (permalink)  
Antiguo 23/08/2014, 12:10
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: generar una factura en pdf desde Php

Así de buenas a primeras, no veo que hagas ningún ciclo (while, for) sobre la consulta, así que me inclino a penar que es esto, por otra parte, sería mejor si generas el html o texto con el contenido de tu consulta sin hacer el pdf para asegurarte que estás haciendo bien y completa dicha consulta.
  #3 (permalink)  
Antiguo 23/08/2014, 12:22
 
Fecha de Ingreso: agosto-2013
Ubicación: Talca
Mensajes: 40
Antigüedad: 10 años, 7 meses
Puntos: 1
Respuesta: generar una factura en pdf desde Php

Antes que nada un saludo.
Te recomiendo usar TCPDF que es la librería que estoy usando yo.

Aquí te dejo un código de ejemplo, que use en un sistemita pasado;

Código PHP:
Ver original
  1. <?php
  2.  
  3.    
  4.     require_once('TCPDF/tcpdf.php');
  5.     require_once('TCPDF/lang/spa.php');
  6.  
  7.     #Conexion a Base de datos
  8.    
  9.     class MYPDF extends TCPDF {
  10.  
  11.         private $objclass;
  12.      
  13.         public function ColoredTable($header,$data) {
  14.  
  15.             $this->SetFillColor(255, 0, 0);
  16.             $this->SetTextColor(255);
  17.             $this->SetDrawColor(128, 0, 0);
  18.             $this->SetLineWidth(0.3);
  19.             $this->SetFont('', 'B');
  20.  
  21.             $w = array(40, 55, 35, 22, 35);
  22.             $num_headers = count($header);
  23.             for($i = 0; $i < $num_headers; ++$i) {
  24.                 $this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1);
  25.             }
  26.             $this->Ln();
  27.  
  28.             $this->SetFillColor(224, 235, 255);
  29.             $this->SetTextColor(0);
  30.             $this->SetFont('');
  31.  
  32.             $fill = 0;
  33.             foreach($data as $row) {
  34.                 $this->Cell($w[0], 6, $row['producto_venta'], 'LR', 0, 'C', $fill);
  35.                 $this->Cell($w[1], 6, $row['nombreprod_venta'], 'LR', 0, 'C', $fill);
  36.                 $this->Cell($w[2], 6, $row['producto_valor'], 'LR', 0, 'C', $fill);
  37.                 $this->Cell($w[3], 6, $row['sum(cantidad_venta)'], 'LR', 0, 'C', $fill);
  38.                 $this->Cell($w[4], 6, $row['sum(total_venta)'], 'LR', 0, 'C', $fill);
  39.                 $this->Ln();
  40.                 $fill=!$fill;
  41.             }
  42.             $this->Cell(array_sum($w), 0, '', 'T');
  43.         }
  44.     }
  45.  
  46.     $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
  47.     $db = new VentaDb();
  48.  
  49.  
  50.     $idCliente = $_GET['idCliente'];
  51.  
  52.     $sql = mysql_query("SELECT nombre_cliente, apellido__cliente, edad_cliente FROM cliente WHERE idCliente = ".$idCliente." ",$conexionBD);
  53.  
  54.     #Detalles del cliente
  55.  
  56.     $pdf->SetCreator(PDF_CREATOR);    
  57.     $pdf->SetHeaderData("logo.png", PDF_HEADER_LOGO_WIDTH, 'Detalle Cliente', "Cliente: ".$sql['nombre_cliente']." ".$sql['apellido__cliente']." \nEdad: ".$sql['edad_cliente']."");
  58.     $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
  59.     $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));    
  60.     $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
  61.     $pdf->SetMargins(8, 40, PDF_MARGIN_RIGHT);
  62.     $pdf->SetHeaderMargin(5);
  63.     $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
  64.     $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);    
  65.     $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
  66.     $pdf->setLanguageArray($l);
  67.     $pdf->SetFont('helvetica', '', 12);  
  68.     $pdf->AddPage();
  69.      
  70.     $query = mysql_query("SELECT producto_venta, nombreprod_venta, valor_venta, sum(cantidad_venta), sum(total_venta) FROM venta INNER JOIN detalleunico d ON
  71.    d.idunico = venta.factura INNER JOIN producto p ON p.idproducto = venta.producto_venta WHERE detalleunico.cliente = ".$idCliente." GROUP BY producto_venta", $conexionBD)
  72.  
  73.     while($rows = mysql_fetch_array($query)):
  74.          $data[] = $rows;
  75.     endwhile;
  76.  
  77.     $pdf->ColoredTable($header, $data);    
  78.     $pdf->Output('Detalle de Factua Cliente '.$idCliente.'.pdf', 'I'); #Si se quiere descargar el PDF directamente, en la ultima linea poner 'D'
  79.    
  80. ?>

Descarga la librería desde su pagina oficial http://sourceforge.net/projects/tcpdf/files/

Última edición por Cristian23CL4PTP; 23/08/2014 a las 22:01
  #4 (permalink)  
Antiguo 24/08/2014, 11:46
 
Fecha de Ingreso: julio-2007
Mensajes: 23
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: generar una factura en pdf desde Php

Muchas gracias
christian por tu propuesta :) intentaré primero de seguir con el desarrollo que he hecho si no me funciona intentaré aprobar tu código.
ocp001a tienes razon tengo que hace un while para ir listando todo el pedido
kdo lo intenté se me deshace el cuadro que hizé para listar el contenido del pedido asi estaré agradecido si me puedes especificar la consulta concretamente para que lo puedo aprobar
muchas gracias
sal2

Etiquetas: factura, fecha, mysql, pdf, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:26.