- Home
- Categorie
- Coding e Sistemistica
- Coding
- Report - Stampa
-
Report - Stampa
Riporto quel che ho chiesto su HTML.it (si può fare pubblicità? Se no, scusatemi!)
Ho grandissimi problemi con la gestione delle stampe di report commerciali.
Ho provato due alternative:
- Generazione di codice HTML con CSS
- 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 è:
- Non riesco ad inserire il subtotale di ogni colonna per ogni pagina
- 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?
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?
-
Di solito li gestisco in pdf usando la classe R&OS
-
Come fai a capire quando finisce una pagina per inserire i subtotali?
Ho dato un'occhiata al file readme.pdf della classe ma non trovo niente in merito: non si riesce a capire quando la pagina stia finendo per inserire il subtotale per pagina.
E poi non si riesce a costruire il report in maniera visuale. Ad esempio guardando la pagina ed inserendo i vari campi con un drag&drop del mouse.
Attualmente uso fpdf con queste due classi:
<?php require('../include/fpdf/mysql_table.php'); session_start(); /* @author Salvatore Baglieri */ class PDF extends PDF_MySQL_Table { function Header() { //Logo //Arial bold 15 $this->SetFont('Arial','B',20); //Move to the right //$this->Cell(80); //Title $this->Cell(100,15,'Elenco dei pazienti',1,0,'C'); $this->SetFont('Arial','',8); $this->Image('../immagini/logo.png', ($this->GetX())+50, 10, '', 18); // $this->MultiCell(0,5,$_SESSION['query'],1,1,'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 il '.date('d-m-Y').' alle '.date('h:i').' con xxx - '); $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/xxx.jpg',10,280, 10, 10); $this->Line(10, 196, 285, 196); //Page number $this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'R'); } } //Connect to database mysql_connect('xxx','xxx','xxx'); mysql_select_db('xxx'); $pdf=new PDF(); $pdf->SetCompression(true); $pdf->SetTitle('Elenco_Pazienti'); $pdf->AliasNbPages(); $pdf->Open(); $pdf->AddPage('L'); //Second table: specify 3 columns $pdf->AddCol('IdAnagrafica',5,'Id','L'); $pdf->AddCol('Cognome',35,'Cognome','L'); $pdf->AddCol('Nome',35,'Nome','L'); //$pdf->AddCol('Sesso',12,'Sesso','C'); $pdf->AddCol('DatadiNascita',22,'Data Nascita','C'); $pdf->AddCol('CodiceFiscale',36,'Codice Fiscale','L'); $pdf->AddCol('Professione',45,'Professione','L'); $pdf->AddCol('Domicilio',45,'Domicilio','L'); $pdf->AddCol('ComunediResidenza',45,'Comune','L'); $prop=array('HeaderColor'=>array(255,150,100), 'color1'=>array(210,245,255), 'color2'=>array(255,255,210), 'padding'=>2); $pdf->SetFont('Arial','',9); $pdf->Table($_SESSION['query'],$prop); $pdf->Output("Elenco_Pazienti.pdf", "D"); ?>
Utilizzando questa classe:
<?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->SetFont('','B',''); $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(); $this->SetFont('','',''); } 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*['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()."<BR>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*['c']=ucfirst($col['f']); else $this->aCols*['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)) $prop=array(); if(!isset($prop)) $prop=array(); $this->RowColors=array($prop,$prop); //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(); } } ?>
Tutta via:
- La creazione del report NON è visuale;
- Non riesce ad inserire i subtotali alla fine di ogni pagina (non posso metterlo sul pié di pagina, come è facilmente intuibile).
-
Tengo conto dell'altezza del "foglio" se supera il massimo da me deciso crea un'altra pagina