2011-11-30 12 views
6

मैं डेटा की एक तालिका के साथ एक पीडीएफ फाइल बनाने की कोशिश कर रहा हूं .. लेकिन जब कोई पेज ब्रेक पूरा हो जाता है तो यह पृष्ठ पर एक नया मल्टीसेल जोड़ा जाता है, जब भी यह एक नए पेज पर कूद जाता है ब्रेक पॉइंट लेवल ..!टीसीपीडीएफ/एफपीडीएफ - पेज ब्रेक इश्यू

मैं बिल्कुल TCPDF के साथ भी ऐसा ही करने की कोशिश की है, लेकिन अभी भी एक पेज के साथ एक ही मुद्दा हर बार एक नया सेल मैं पृष्ठ विराम बिंदु स्तर के आसपास जोड़ा तोड़ने ...

उदाहरण:

http://www.online-økonomi.dk/_tst_fpdf.php

require_once '../class/download/fpdf/fpdf.php'; 

class File_PDF { 
    private $pdf; 

    private $col_product = 25; 
    private $col_unit = 12; 
    private $col_price = 20; 
    private $col_count = 14; 
    private $col_discount = 12; 
    private $col_vat = 12; 
    private $col_sum = 22; 

    private $width = 200; 
    private $line_height = 4.2; 
    private $margin_top = 30; 

    public function generate(){ 
     $this->pdf = new FPDF(); 
     $this->pdf->AddPage(); 
     $this->pdf->SetDisplayMode('real'); 
     $this->pdf->SetAutoPageBreak(true, 150); 

     if($this->products){ 
      $i = 0; 
      $this->color_light(); 
      foreach($this->products as $product){ 
       $this->add_product($product, $i % 2 ? true:false); 
       $i++; 
      } 
     } 

     $this->pdf->Output(); 
    } 

    private function add_product($product, $fill){ 
     $this->txt(); 

     $x = $this->width; 
     $y = $this->pdf->GetY(); 

     $this->cell_sum($this->col_sum, $x, $y, $product['sum']/100, 'R', $fill); 
     $this->cell_vat($this->col_vat, $x, $y, $product['vat_percent'], 'R', $fill); 
     $this->cell_discount($this->col_discount, $x, $y, $product['discount_percent']/100, 'R', $fill); 
     $this->cell_count($this->col_count, $x, $y, $product['count']/100, 'R', $fill); 
     $this->cell_price($this->col_price, $x, $y, $product['price']/100, 'R', $fill); 
     $this->cell_unit($this->col_unit, $x, $y, $product['unit_name'], 'L', $fill); 
     $this->cell_name(0, $x, $y, $product['name'], 'L', $fill); 
     $this->cell_product($this->col_product, $x, $y, $product['product_id_'], 'L', $fill); 
    } 

    private function cell_sum($width, &$x, $y, $str, $align, $fill=false){ 
     $this->cnstr_cell($width, $x, $y, $str, $align, $fill); 
    } 

    private function cell_vat($width, &$x, $y, $str, $align, $fill=false){ 
     $this->cnstr_cell($width, $x, $y, $str, $align, $fill); 
    } 

    private function cell_discount($width, &$x, $y, $str, $align, $fill=false){ 
     $this->cnstr_cell($width, $x, $y, $str, $align, $fill); 
    } 

    private function cell_count($width, &$x, $y, $str, $align, $fill=false){ 
     $this->cnstr_cell($width, $x, $y, $str, $align, $fill); 
    } 

    private function cell_price($width, &$x, $y, $str, $align, $fill=false){ 
     $this->cnstr_cell($width, $x, $y, $str, $align, $fill); 
    } 

    private function cell_unit($width, &$x, $y, $str, $align, $fill=false){ 
     $this->cnstr_cell($width, $x, $y, $str, $align, $fill); 
    } 

    private function cell_name($width, &$x, $y, $str, $align, $fill=false){ 
     $this->pdf->SetXY($this->col_product + 10, $y); 
     $this->pdf->MultiCell($x - $this->col_product - 10, $this->line_height, $str, 0, $align, $fill); 
    } 

    private function cell_product($width, &$x, $y, $str, $align, $fill=false){ 
     $this->pdf->SetXY(10, $y); 
     $this->pdf->MultiCell($this->col_product, $this->line_height, $str, 0, $align, $fill); 
    } 

    private function cnstr_cell($width, &$x, $y, $str, $align='L', $fill=false){ 
     $x -= $width; 
     $this->pdf->SetXY($x, $y); 
     $this->pdf->MultiCell($width, $this->line_height, $str, 0, $align, $fill); 
    } 

    private function color_light(){ 
     $this->pdf->SetFillColor(200, 200, 200); 
    } 

    private function txt(){ 
     $this->pdf->SetFont('Arial', '', 8.5); 
    } 

    private function txt_marked(){ 
     $this->pdf->SetFont('Arial', 'B', 8.5); 
    } 

    private $products = array(
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ), 
     array(
      'product_id_' => 'ADS1550', 
      'name' => 'name', 
      'unit_name' => 'pcs', 
      'price' => 182450000, 
      'count' => 310000, 
      'discount_percent' => 19900, 
      'vat_percent' => 0, 
      'sum' => 1587057200 
      ) 
     ); 
} 

$PDF = new File_PDF(); 
$PDF->generate(); 
+0

क्या आप कृपया * लघु * कोड नमूना दे सकते हैं? बस अपने कोड को सरल बनाने के लिए 10 मिनट दें ताकि वह एक पृष्ठ में भर जाए, सभी ऑब्जेक्ट गुणों को हटा दें, और अधिक लोग आपको जवाब देने का प्रयास कर सकते हैं। –

उत्तर

19

समस्या यह है कि Cell() विधि (जो MultiCell() में कहा जाता है) में FPDF allways एक नया पृष्ठ कहते हैं अगर वर्तमान Y स्थिति + नया सेल की ऊंचाई allowe से अधिक है डी पेज ऊंचाई।

डिफ़ॉल्ट पृष्ठ ऊंचाई 2 9 7 है, SetAutoPageBreak() के साथ आप 150 इसे घटाते हैं। तो जब Y + cell_height 147 से अधिक है तो आपको cnstr_cell() पर कॉल करते समय हमेशा एक नया पृष्ठ मिलता है।

इसे रोकने के लिए आपको AddPage() पर कॉल करने की आवश्यकता है। इस चेक को अपने add_product() विधि में जोड़ें:

$x = $this->width; 
$y = $this->pdf->GetY(); 

if (($y + $this->line_height) >= 147) { 
    $this->pdf->AddPage(); 
    $y = 0; // should be your top margin 
} 

बीटीडब्ल्यू। मुझे हाल ही में एक गतिशील पीडीएफ उत्पन्न करना पड़ा, मैंने wkhtmltopdf का उपयोग करके समाप्त किया, यह सभी PHP पुस्तकालयों की तुलना में उपयोग और अनुकूलित करने के लिए और अधिक आसान था। मैं इसे देखने का सुझाव देता हूं।

+0

बहुत बहुत धन्यवाद ..! :) – clarkk

+1

बस एक एफवाईआई, आज इस जवाब को पढ़ने के दौरान, मैंने देखा कि 'wkhtmltopdf' का लिंक टूटा हुआ है। –

+1

@ टिमलेविस धन्यवाद, मैंने लिंक तय किया! – Jona

संबंधित मुद्दे