Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Report e Stampa

  1. #1

    Report e Stampa

    Ho grandissimi problemi con la gestione delle stampe di report commerciali.

    Ho provato due alternative:
    1. Generazione di codice HTML con CSS
    2. Generazione file PDF

    Il primo l'ho abbandonato subito perchè non mi permetteva di inserire "Intestazione di Pagina" e "Piè di pagina" su ogni pagina stampata.

    Per il secondo ho creato una classe PHP a cui passo la query e lui genera il report.

    Il problema è:
    1. Non riesco ad inserire il subtotale di ogni colonna per ogni pagina
    2. E' una faticaccia scrivere tutto il codice a mano.

    Non esiste qualche programma che, in maniera automatica, genera report in PHP? Che mi aggiunga i subtotali ad ogni colonna?
    Ubuntu 7.10 - JAVA: JDK 1.6.0 - MSI Megabook S262

    www.digital2b.com
    Gestione Documentale e Archiviazione Ottica Sostitutiva

  2. #2
    Per quanto riguarda la classe che genera il PDF, ecco il codice.

    Codice PHP:
    --- START CODE TEST.PHP ---

    <?php 

    /*

    Ho bisogno di stampare i subtotali per ogni (o alcune) colonne di ogni pagina.

    Nome - Price
    Coca  - 80 $
    Pepsi - 100 $

    Subtotale Pag. 1 - 180 $

    Totale di tutte le pagine - 180 $

    */

    require('include/fpdf/mysql_table.php');

    class 
    PDF extends PDF_MySQL_Table
    {
    function 
    Header() {
        
    //Logo
        
        //Arial bold 15
        
    $this->SetFont('Arial','B',15);
        
    //Move to the right
        //$this->Cell(80);
        //Title
        
    $this->Cell(0,10,'Report - Riepilogo Ricette',1,0,'C');
        
    //Line break
        
    $this->Ln(20);
    }

    //Page footer
    function Footer() {
        
    //Position at 1.5 cm from bottom
        
    $this->SetY(-15);
        
        
    //Arial italic 8
        
    $this->SetFont('Arial','I',8);
        
    $this->Write(10,'Documento stampato con GSM .NET - ');
        
    $this->SetTextColor(0,0,255);
        
    $this->SetFont('','U');
        
    $this->Write(10,'Digital 2B s.n.c.','http://www.digital2b.com');
        
    $this->SetTextColor(0,0,0);
        
    $this->SetFont('Arial','I',8);
        
    // $this->Image('immagini/gsm.jpg',10,280, 10, 10);
        
        
    $this->Line(10285200285);
        
    //Page number
        
    $this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'R');
    }


    }

    //Connect to database
    mysql_connect('***','***','***');
    mysql_select_db('***');

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

    //Second table: specify 3 columns
    $pdf->AddCol('codicecf',50,'Codice CF','C');
    $pdf->AddCol('comune',100,'Comune''L');
    //$pdf->AddCol('pop',40,'Pop (2001)','R');
    $prop=array('HeaderColor'=>array(255,150,100),
                
    'color1'=>array(210,245,255),
                
    'color2'=>array(255,255,210),
                
    'padding'=>2);
    $pdf->Table('select CodiceCF as codicecf, Comune as comune from Comuni',$prop);
    $pdf->Output();
    ?>

    --- END TEST.PHP ---
    Codice PHP:
    --- START MYSQL_TABLE.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() {
        
    //Print the table header if necessary
        
    if($this->ProcessingTable)
            
    $this->TableHeader();
    }


    function 
    TableHeader() {
        
    $this->SetFont('Arial','B',12);
        
    $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)
    {
        
    //Compute the widths of the columns
        
    $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;
        }
        
    //Compute the abscissa of the table
        
    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')
    {
        
    //Add a column to the table
        
    if($field==-1)
            
    $field=count($this->aCols);
        
    $this->aCols[]=array('f'=>$field,'c'=>$caption,'w'=>$width,'a'=>$align);
    }

    function 
    Table($query,$prop=array())
    {
        
    //Issue query
        
    $res=mysql_query($query) or die('Error: '.mysql_error()."
    Query: 
    $query");
        
    //Add all columns if none was specified
        
    if(count($this->aCols)==0)
        {
            
    $nb=mysql_num_fields($res);
            for(
    $i=0;$i<$nb;$i++)
                
    $this->AddCol();
        }
        
    //Retrieve column names when not specified
        
    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']));
            }
        }
        
    //Handle properties
        
    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']);
        
    //Compute column widths
        
    $this->CalcWidths($prop['width'],$prop['align']);
        
    //Print header
         
    $this->TableHeader();
        
    //Print rows
        
    $this->SetFont('Arial','',11);
        
    $this->ColorIndex=0;
        
    $this->ProcessingTable=true;
        while(
    $row=mysql_fetch_array($res))
            
    $this->Row($row);
        
    $this->ProcessingTable=false;
        
    $this->cMargin=$cMargin;
        
    $this->aCols=array();
    }
    }
    ?>

    --- END MYSQL_TABLE.PHP ---
    Ubuntu 7.10 - JAVA: JDK 1.6.0 - MSI Megabook S262

    www.digital2b.com
    Gestione Documentale e Archiviazione Ottica Sostitutiva

  3. #3
    Ho visto un programma (fatto in Delphi + Access Mdb) che addirittura permette di creare report personalizzati con un word processor simile a Word.



    E' una funzionalità offerta da Delphi? Un programma esterno? Come si può fare lo stesso in php?

    Cioè, come do la possibilità al cliente di personalizzare i propri report?
    Ubuntu 7.10 - JAVA: JDK 1.6.0 - MSI Megabook S262

    www.digital2b.com
    Gestione Documentale e Archiviazione Ottica Sostitutiva

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.