Foros del Web » Programando para Internet » PHP »

¿Imprimir en PHP?

Estas en el tema de ¿Imprimir en PHP? en el foro de PHP en Foros del Web. Hola, debo hacer un sistema de facturacion pero solo me han dado como opcion usar un entorno Web y por ende PHP. ¿Como puedo hacer ...
  #1 (permalink)  
Antiguo 15/10/2005, 17:31
Avatar de juank30  
Fecha de Ingreso: julio-2005
Mensajes: 29
Antigüedad: 18 años, 8 meses
Puntos: 0
Pregunta ¿Imprimir en PHP?

Hola, debo hacer un sistema de facturacion pero solo me han dado como opcion usar un entorno Web y por ende PHP. ¿Como puedo hacer para imprimir las boletas y facturas para los clientes desde PHP?. O al menos los reportes. Por favor solo coloquen un poco de codigo de cualquier tipo de impresion desde Web para poderme guiar. Gracias.
__________________
.:Ju@nK:.
  #2 (permalink)  
Antiguo 15/10/2005, 21:29
Avatar de DvD AdN  
Fecha de Ingreso: mayo-2005
Ubicación: Frente al monitor
Mensajes: 610
Antigüedad: 18 años, 11 meses
Puntos: 0
PHP solo trabaja del lado del servidor, por lo tanto no puedes imprimir por que eso ya es cosa del lado del cliente.
Para imprimir usa JavaScript, creo que la función es print();

Saludos
__________________
Keep f***ing learning
Ask for f***ing help.
Use f***ing spell check.
Think about all the f***ing possibilities.
  #3 (permalink)  
Antiguo 16/10/2005, 07:45
Avatar de juank30  
Fecha de Ingreso: julio-2005
Mensajes: 29
Antigüedad: 18 años, 8 meses
Puntos: 0
Se que solo trabaja del lado del servidor, en si mi duda es que si existe o tienes conocimiento de alguna libreria que pueda dar el formato adecuado a la informacion la cual puedo accesar desde php para poderla imprimir.
__________________
.:Ju@nK:.
  #4 (permalink)  
Antiguo 16/10/2005, 08:51
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Lo que se me ocurre que podés hacer para garantizar que se imprima bien es generar una imagen usando la galería gd del tamaño de la hoja que vos quieras. De esa forma no se te va a deformar (valga la redundancia).

Lo que no sé es el tema de los márgenes, no sé si todos los browsers van a imprimir la imagen con los mismos márgenes.
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #5 (permalink)  
Antiguo 16/10/2005, 19:01
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 7 meses
Puntos: 0
o tambien lo que pudes hacer es enviar a formato pdf facturacion y de hay imprimir...para eso se utiliza lo siguiente
Código PHP:
define('FPDF_FONTPATH','font/');
require(
'mysql_table.php');
include(
"comunes.php");
include (
"../conectar.php");
include (
"../convertirfechas2.php"); 

$pdf=new PDF();
$pdf->Open();
$pdf->AddPage();

$pdf->Ln(10);


include (
"../conectar.php");
  
  
$consulta "Select * from albaranesp,proveedores where albaranesp.codalbaran='$codalbaran' and proveedores.codproveedor='$codcli' and albaranesp.codproveedor=proveedores.codproveedor";
$resultado mysql_query($consulta$conexion);
$lafila=mysql_fetch_array($resultado);

    
    
$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,'ALBARÁN DE PROVEEDORES');
    
$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["nombre"],'LR',0,'L',1);
    
$pdf->Ln(4);

    
$pdf->Cell(95);
    
$pdf->Cell(80,4,$lafila["direccion"],'LR',0,'L',1);
    
$pdf->Ln(4);
    
    
//Calculamos la provincia
    
$codigoprovincia=$lafila["codprovincia"];
    
$consulta="select * from provincias where codprovincia=$codigoprovincia";
    
$query=mysql_query($consulta);
    
$row=mysql_fetch_array($query);

    
$pdf->Cell(95);
    
$pdf->Cell(80,4,$lafila["cp"] . "  " $lafila["localidad"] . "  (" $row["denprovincia"] . ")",'LR',0,'L',1);
    
$pdf->Ln(4);

    
$pdf->Cell(95);
    
$pdf->Cell(80,4,"Tlfno: " $lafila["telefono"] . "  " "Fax: " $lafila["fax"],'LR',0,'L',1);
    
$pdf->Ln(4);    
        
    
$pdf->Cell(95);
    
$pdf->Cell(80,4,"",'LRB',0,'L',1);
    
$pdf->Ln(10);                
    
    
$pdf->SetFillColor(200,200,200);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','B',10);
    
    
$pdf->Cell(80);
    
$pdf->Cell(30,4,"NIF",1,0,'C',1);
    
$pdf->Cell(30,4,"Cod. Prov.",1,0,'C',1);
    
$pdf->Cell(30,4,"Fecha",1,0,'C',1);    
    
$pdf->Cell(20,4,"Nº Alb.",1,0,'C',1);
    
$pdf->Ln(4);
    
    
$pdf->Cell(80);
    
$pdf->SetFillColor(255,255,255);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','B',10);
    
    
$fecha reconversion($lafila["fecha"]);
    
    
$pdf->Cell(30,4,$lafila["nif"],1,0,'C',1);
    
$pdf->Cell(30,4,$lafila["codproveedor"],1,0,'C',1);
    
$pdf->Cell(30,4,$fecha,1,0,'C',1);    
    
$pdf->Cell(20,4,$lafila["codalbaran"],1,0,'C',1);        
    
    
    
//ahora mostramos las líneas del albarán
    
$pdf->Ln(10);        
    
$pdf->Cell(1);
    
    
$pdf->SetFillColor(200,200,200);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','B',10);
    
    
$pdf->Cell(15,4,"Codigo",1,0,'C',1);
    
$pdf->Cell(105,4,"Descripción",1,0,'C',1);
    
$pdf->Cell(20,4,"Cantidad",1,0,'C',1);    
    
$pdf->Cell(15,4,"Precio",1,0,'C',1);
    
$pdf->Cell(15,4,"% Desc.",1,0,'C',1);    
    
$pdf->Cell(20,4,"Importe",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','',9);

    
    
$consulta2 "Select * from albalineap where codalbaran='$codalbaran' and codproveedor='$codcli' order by numlinea";
    
$resultado2 mysql_query($consulta2$conexion);
    
    
$contador=1;
    while (
$row=mysql_fetch_array($resultado2))
    {
      include(
"controlimpresionalbp.php");
      
$pdf->Cell(1);
      
    if ((
$row["codfamilia"]=='p') and ($row["codsubfamilia"]=='p')) 
      { 
        
$pdf->Cell(15,4,"Parte",'LR',0,'C');
       } 
    else 
      { 
       
$pdf->Cell(15,4,$row["codfamilia"] . $row["codsubfamilia"] . $row["codigo"],'LR',0,'C');
      } 

      
      
//averiguamos los datos del artículo
      
$familia=$row["codfamilia"];
      
$subfamilia=$row["codsubfamilia"];
      
$codigoarticulo=$row["codigo"];
      
$consulta3="select * from articulos where codfamilia='$familia' and codsubfamilia='$subfamilia' and codigo='$codigoarticulo'";
      
$query3=mysql_query($consulta3);
      
$articulo=mysql_fetch_array($query3);
      
      
      if ((
$row["codfamilia"]=='p') and ($row["codsubfamilia"]=='p')) 
      { 
        
$pdf->Cell(105,4,"Importe correspondiente al parte " $codigoarticulo,'LR',0,'L');
       } 
    else 
      { 
       
$acotado substr($articulo["descripcion"], 055);
       
$pdf->Cell(105,4,$acotado,'LR',0,'L');
      } 
      
      
$cantidad2=number_format($row["cantidad"],2,",",".");      
      
$pdf->Cell(20,4,$cantidad2,'LR',0,'R');    

       
      
$precio2=number_format($row["precio"],2,",",".");
      
      
$pdf->Cell(15,4,$precio2,'LR',0,'R');
      
      if (
$row["dcto"]==0
      {
      
$pdf->Cell(15,4,"",'LR',0,'C');
      } 
      else 
       { 
        
$pdf->Cell(15,4,$row["dcto"] . " %",'LR',0,'C');
       }
      
      
$importe2=number_format($row["importe"],2,",",".");      
      
      
$pdf->Cell(20,4,$importe2,'LR',0,'R');
      
$pdf->Ln(4);    
      
      
//vamos acumulando el importe
      
$importe=$importe $row["importe"];
      
$contador=$contador 1;
      
    };
    
    
   include(
"observacionesalbp.php");    
    
    while (
$contador<35)
    {
      
$pdf->Cell(1);
      
$pdf->Cell(15,4,"",'LR',0,'C');
      
$pdf->Cell(105,4,"",'LR',0,'C');
      
$pdf->Cell(20,4,"",'LR',0,'C');    
      
$pdf->Cell(15,4,"",'LR',0,'C');
      
$pdf->Cell(15,4,"",'LR',0,'C');
      
$pdf->Cell(20,4,"",'LR',0,'C');
      
$pdf->Ln(4);    
      
$contador=$contador +1;
    }

      
$fill=0;
      
$pdf->Cell(1);
      
$pdf->Cell(15,4,"",'LRB',0,'C');
      
$pdf->Cell(105,4,"",'LRB',0,'C');
      
$pdf->Cell(20,4,"",'LRB',0,'C');    
      
$pdf->Cell(15,4,"",'LRB ',0,'C');
      
$pdf->Cell(15,4,"",'LRB',0,'C');
      
$pdf->Cell(20,4,"",'LRB',0,'C');
      
$pdf->Ln(4);    


    
//ahora mostramos el final de la factura
    
$pdf->Ln(10);        
    
$pdf->Cell(66);
    
    
$pdf->SetFillColor(200,200,200);
    
$pdf->SetTextColor(0);
    
$pdf->SetDrawColor(0,0,0);
    
$pdf->SetLineWidth(.2);
    
$pdf->SetFont('Arial','B',10);
    
    
$pdf->Cell(30,4,"NETO",1,0,'C',1);
    
$pdf->Cell(30,4,"CUOTA IVA",1,0,'C',1);
    
$pdf->Cell(30,4,"IVA",1,0,'C',1);    
    
$pdf->Cell(35,4,"TOTAL",1,0,'C',1);
    
$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(66);
    
    
$importe3=number_format($importe,2,",",".");
    
$pdf->Cell(30,4,$importe3,1,0,'R',1);
    
$pdf->Cell(30,4,$lafila["iva"] . "%",1,0,'C',1);
    
    
$ivai=$lafila["iva"];
    
$impo=$importe*($ivai/100);
    
$impo=sprintf("%01.2f"$impo); 
    
$total=$importe+$impo
    
$total=sprintf("%01.2f"$total);

    
$impo=number_format($impo,2,",",".");
    
$impo=sprintf("%01.2f"$impo);
    
$impo str_replace(".",",",$impo); 
    
    
$total=sprintf("%01.2f"$total);
    
$total2number_format($total,2,",",".");     
    
    
$pdf->Cell(30,4,"$impo",1,0,'R',1);    
    
$pdf->Cell(35,4,"$total2" " €",1,0,'R',1);
    
$pdf->Ln(4);


      @
mysql_free_result($resultado); 
      @
mysql_free_result($query);
      @
mysql_free_result($resultado2); 
      @
mysql_free_result($query3);

$pdf->Output();
?> 
y luego
  #6 (permalink)  
Antiguo 16/10/2005, 19:02
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 7 meses
Puntos: 0
este es 'mysql_table.php'

Código PHP:
<?php
require('fpdf.php');

class 
PDF_MySQL_Table extends FPDF
{
var 
$ProcessingTable=false;
var 
$aCols=array();
var 
$TableX;
var 
$HeaderColor;
var 
$RowColors;
var 
$ColorIndex;

function 
Header()
{
    
//Imprime l'en-tête du tableau si nécessaire
    
if($this->ProcessingTable)
        
$this->TableHeader();
}

function 
TableHeader()//parametre de l'entete du tableau
{
    
$this->SetFont('Arial','B',10);
    
$this->SetX($this->TableX);
    
$fill=!empty($this->HeaderColor);
    if(
$fill)
        
$this->SetFillColor($this->HeaderColor[0],$this->HeaderColor[1],$this->HeaderColor[2]);
    foreach(
$this->aCols as $col)
        
$this->Cell($col['w'],6,$col['c'],1,0,'C',$fill);
    
$this->Ln();
}

function 
Row($data)
{
    
$this->SetX($this->TableX);
    
$ci=$this->ColorIndex;
    
$fill=!empty($this->RowColors[$ci]);
    if(
$fill)
        
$this->SetFillColor($this->RowColors[$ci][0],$this->RowColors[$ci][1],$this->RowColors[$ci][2]);
    foreach(
$this->aCols as $col)
        
$this->Cell($col['w'],5,$data[$col['f']],1,0,$col['a'],$fill);
    
$this->Ln();
    
$this->ColorIndex=1-$ci;
}

function 
CalcWidths($width,$align)
{
    
//Calcule les largeurs des colonnes
    
$TableWidth=0;
    foreach(
$this->aCols as $i=>$col)
    {
        
$w=$col['w'];
        if(
$w==-1)
            
$w=$width/count($this->aCols);
        elseif(
substr($w,-1)=='%')
            
$w=$w/100*$width;
        
$this->aCols[$i]['w']=$w;
        
$TableWidth+=$w;
    }
    
//Calcule l'abscisse du tableau
    
if($align=='C')
        
$this->TableX=max(($this->w-$TableWidth)/2,0);
    elseif(
$align=='R')
        
$this->TableX=max($this->w-$this->rMargin-$TableWidth,0);
    else
        
$this->TableX=$this->lMargin;
}

function 
AddCol($field=-1,$width=-1,$caption='',$align='L')
{
    
//Ajoute une colonne au tableau
    
if($field==-1)
        
$field=count($this->aCols);
    
$this->aCols[]=array('f'=>$field,'c'=>$caption,'w'=>$width,'a'=>$align);
}

function 
Table($query,$prop=array())
{
    
//Exécute la requête
    
$res=mysql_query($query) or die('Erreur: '.mysql_error()."<BR>Requête: $query");
    
//Ajoute toutes les colonnes si aucune n'a été définie
    
if(count($this->aCols)==0)
    {
        
$nb=mysql_num_fields($res);
        for(
$i=0;$i<$nb;$i++)
            
$this->AddCol();
    }
    
//Détermine les noms des colonnes si non spécifiés
    
foreach($this->aCols as $i=>$col)
    {
        if(
$col['c']=='')
        {
            if(
is_string($col['f']))
                
$this->aCols[$i]['c']=ucfirst($col['f']);
            else
                
$this->aCols[$i]['c']=ucfirst(mysql_field_name($res,$col['f']));
        }
    }
    
//Traite les propriétés
    
if(!isset($prop['width']))
        
$prop['width']=0;
    if(
$prop['width']==0)
        
$prop['width']=$this->w-$this->lMargin-$this->rMargin;
    if(!isset(
$prop['align']))
        
$prop['align']='C';
    if(!isset(
$prop['padding']))
        
$prop['padding']=$this->cMargin;
    
$cMargin=$this->cMargin;
    
$this->cMargin=$prop['padding'];
    if(!isset(
$prop['HeaderColor']))
        
$prop['HeaderColor']=array();
    
$this->HeaderColor=$prop['HeaderColor'];
    if(!isset(
$prop['color1']))
        
$prop['color1']=array();
    if(!isset(
$prop['color2']))
        
$prop['color2']=array();
    
$this->RowColors=array($prop['color1'],$prop['color2']);
    
//Calcule les largeurs des colonnes
    
$this->CalcWidths($prop['width'],$prop['align']);
    
//Imprime l'en-tête
    
$this->TableHeader();
    
//Imprime les lignes
    
$this->SetFont('Arial','',8);//police des lignes du tableau
    
$this->ColorIndex=0;
    
$this->ProcessingTable=true;
    while(
$row=mysql_fetch_array($res))
        
$this->Row($row);
    
$this->ProcessingTable=false;
    
$this->cMargin=$cMargin;
    
$this->aCols=array();
}
}
?>
y luego..
  #7 (permalink)  
Antiguo 16/10/2005, 19:06
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 7 meses
Puntos: 0
si deseas saver mas bajate este programa..
galopin_beta3 es muy bueno y tembien sirve par facturar...saludos.
  #8 (permalink)  
Antiguo 16/10/2005, 19:35
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
No se me había ocurrido, definitivamente creo que generar un pdf es la mejor opción.
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #9 (permalink)  
Antiguo 17/10/2005, 07:20
Avatar de juank30  
Fecha de Ingreso: julio-2005
Mensajes: 29
Antigüedad: 18 años, 8 meses
Puntos: 0
Muchas gracias anime_2021 y thunder.scripts, voy ha comerme todo el codigo de Galopin, y ver que opciones mas tenemos; lo interesante seria que se pueda imprmir tan igual y rapido como si fuera un sistema de escritorio a menos ese es mi objetivo. Apenas tenga algo concreto lo pondre en el foro para que todos aprendamos.
__________________
.:Ju@nK:.
  #10 (permalink)  
Antiguo 17/10/2005, 07:25
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Recén leí al pasar en el foro sobre algo como javascript dentro de un pdf que permite, entre otras cosas, que el usuario lo imprima directamente (o algo por el estilo). Buscá en google y quizás encontrás algo.

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #11 (permalink)  
Antiguo 17/10/2005, 08:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por thunder.scripts
Recén leí al pasar en el foro sobre algo como javascript dentro de un pdf que permite, entre otras cosas, que el usuario lo imprima directamente (o algo por el estilo). Buscá en google y quizás encontrás algo.

Suerte
Fede
Supongo que te refieres a mi comentario:

http://www.forosdelweb.com/showpost....77&postcount=5

Como ahí indico .. el "javascript" se incrustra dentro del documento PDF (la classe FPDF lo permite fácilmente). Pero hay que tener presente que lo ideal es "incrustrar" ese código "javascript" en el documento cuando este se genere para entregar al cliente ("visualizar en línea") y de ahí se requiera forzar la impresión .. De todas formas el archivo en sí se ha de descargar al cliente (tal vez enviandolo a un frame/iframe oculto se consiga algún efecto "semi-transparente" de envio a impresora directo o con la minima confirmación por parte del cliente).


Un saludo,
  #12 (permalink)  
Antiguo 17/10/2005, 09:31
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Con respecto a la impresión (y por experiencia propia), me parece recomendable que no se imprima directamente, ya que al generar el documento pdf los márgenes no siempre coinciden con los propios de la impresora, así que un cuadro de diálogo antes de una impresión, creo que es lo más adecuado (siempre que sea importante una buena "maquetación") ... el uso de javascript tal vez sea más recomendable para hacer saltar una alerta.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #13 (permalink)  
Antiguo 17/10/2005, 11:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por caricatos
Hola:

Con respecto a la impresión (y por experiencia propia), me parece recomendable que no se imprima directamente, ya que al generar el documento pdf los márgenes no siempre coinciden con los propios de la impresora, así que un cuadro de diálogo antes de una impresión, creo que es lo más adecuado (siempre que sea importante una buena "maquetación") ... el uso de javascript tal vez sea más recomendable para hacer saltar una alerta.

Saludos
El ejemplo que usa FPDF al respecto (impresión directa/o con confirmación) permite eso mismo .. lanzar por fecto al abrir tu PDF creado el dialogo de impresión (o no):

Cita:
//Embed some JavaScript to show the print dialog or start printing immediately
$param=($dialog ? 'true' : 'false');
$script="print($param);";
$this->IncludeJS($script);
}
http://www.fpdf.org/en/script/script36.php

Por eso decía que .. dependiendo del caso .. generas el documento con el menú de impresión abierto al momento de abrir el PDF o no ..

Un saludo,
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 06:42.