2012-03-01 18 views
10

क्या दस्तावेज़ में पहले पृष्ठ के लिए अलग-अलग शीर्षलेख लोगो और दूसरे पृष्ठ के लिए अलग-अलग शीर्षलेख लोगो का कोई तरीका है?टीसीपीडीएफ ने एक दस्तावेज़ में विभिन्न पृष्ठों के लिए अलग-अलग शीर्षलेख सेट किए हैं

मैंने सोचा था कि जोड़ने पृष्ठों के बीच हैडर डेटा को बदलने चाल कर सकते हैं, लेकिन मेरे परीक्षण में ऐसा लगता है पहले पृष्ठ जोड़ने के बाद हैडर की स्थापना कोई प्रभाव नहीं है कि:

/* other stuff 
$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
$pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 

$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 
$pdf->AliasNbPages(); 
*/ 

$pdf->SetHeaderData("logo_1.png", PDF_HEADER_LOGO_WIDTH, '', ''); 
$pdf->AddPage(); 
$pdf->writeHTML($htmlContent, true, 0, true, true); 

$pdf->SetHeaderData("logo_2.png", PDF_HEADER_LOGO_WIDTH, '', ''); 
$pdf->AddPage(); 
$pdf->writeHTML($htmlContent2, true, 0, true, true); 

ऊपर एक दस्तावेज का उत्पादन शीर्षलेखों में logo_1.png दोनों के साथ 2 पृष्ठ हैं।

क्या मुझे टीसीपीडीएफ को स्वयं अनुकूलित करने की आवश्यकता होगी? क्या किसी ने ऐसा किया है? मैं संस्करण 5.9.144 का उपयोग कर रहा हूं।

उत्तर

7

अजीब। मेरे पास एक ही समस्या है, लेकिन यह मेरे पुराने संस्करण में टीसीपीडीएफ संस्करण: 4.8.00 9 में काम करता है और जब मैंने 5.9.149 में अपग्रेड किया तो मैंने इस मुद्दे को देखा।

मैंने 2 की तुलना की और इस मुद्दे को हेडर() फ़ंक्शन में अलग कर दिया।

मैं इसे हेडर बदलने और इसे चलाने के द्वारा इसे स्वीकार करने के लिए मजबूर कर सकता हूं: $ pdf-> setHeaderTemplateAutoreset (true);

+0

बढ़िया, यह वही है जो मैं – bububaba

1

कैसे ... टीसीपीडीएफ अलग-अलग शीर्षकों के साथ अलग-अलग शीर्षकों के साथ पृष्ठों को उत्पन्न करता है, और उसके बाद उन सभी इंटरमीडिएट पीडीएफ को एक साथ अंतिम दस्तावेज़ के पृष्ठों को बनाने के लिए कुछ उपयोग करने के लिए उपयोग करें (शायद टीसीपीडीएफ स्वयं भी विलय कर सकता है, मुझे नहीं पता)?

कुछ "कैसे विलय करें?" परिणाम:

+0

मैं प्रोजेक्ट के लिए ज़ेंड फ्रेमवर्क का उपयोग कर रहा हूं इसलिए विलय 'Zend_Pdf' के साथ करना आसान था। मैं प्रासंगिक कोड को एक अलग उत्तर के रूप में पोस्ट करूंगा। आपकी सहायताके लिए धन्यवाद! – bububaba

+0

कुछ प्रतिष्ठा लेने के लिए खेद है, दूसरा समाधान वही है जो मैं ढूंढ रहा था। – bububaba

0

बस रिकार्ड के लिए, भविष्य में कोई एक ही समस्या है और Zend_Pdf उपयोग कर सकते हैं:

// $filename is the final filename with path to save the generated PDF 
$dir = dirname($filename); 
$base = basename($filename); 

$page1 = $dir . DIRECTORY_SEPARATOR . "tmp_1_" . $base; 
$page2 = $dir . DIRECTORY_SEPARATOR . "tmp_2_" . $base; 

//creates 1st page with TCPDF and saves to filesystem with filename $page1 
$this->generateInvoicePage1($html_1, $page1); 

//creates 2nd page with TCPDF and saves to filesystem with filename $page2 
$this->generateInvoicePage2($html_2, $page2); 

$pdf1 = Zend_Pdf::load($page1); 
$pdf2 = Zend_Pdf::load($page2); 

foreach ($pdf2->pages as $page) { 
    $pdf1->pages[] = clone($page); 
} 

$pdf1->save($filename); 

unlink($page1); 
unlink($page2); 
+0

इसके अलावा, प्रदर्शन-वार, यह एक पुस्तकालय के साथ एक दस्तावेज़ उत्पन्न करने से काफी धीमा प्रतीत होता है, इसलिए सावधान रहें। – bububaba

6

निम्नलिखित मेरे लिए काम किया,

class MYPDF extends TCPDF{ 
    function header1(){ 
     //print whatever the header 1 is 
    } 
    function Header2(){   
     if($this->page==1){ 
      //print header 1 and whatever the header 2 is 
     }else{ 
      //print just header 2 
     } 
    } 
} 
-1

आप शीर्ष लेख और पाद और उनके साथ आंतरिक पृष्ठों के बिना एक आवरण पृष्ठ नहीं रखना चाहती हैं, वहाँ इसे संभाल करने के लिए एक आसान तरीका है। बस 'setPrintHeader' और 'setPrintFooter' के माध्यम से शीर्ष लेख और पाद प्रिंट बंद कर देते हैं इस प्रकार है:

$pdf->setPrintHeader(false); 
$pdf->setPrintFooter(false); 

$pdf->AddPage(); 
$pdf->SetFont("freesans", "B", 20); 
$pdf->Cell(0,10,"COVER TEXT",1,1,'C'); 

$pdf->setPrintHeader(true); 
$pdf->setPrintFooter(true); 

$pdf->setHeaderFont(array("freesans", "", 9)); 
$pdf->SetHeaderData('', '', 'Document Title', 'Document Header Text'); 
$pdf->AddPage(); 
$pdf->SetFont("freesans", "B", 20); 
$pdf->Cell(0,10,"Internal text",1,1,'C'); 

$pdf->Output("HappyCover.pdf", "I"); 

का आनंद लें!

+0

के बाद था, सवाल यह है कि हेडर में एक अलग लोगो कैसे जोड़ना है, हेडर से सभी को एक साथ छुटकारा दिलाना नहीं है। –

+0

आप सही टॉम हैं, मुझे गलत समझा। माफ़ कीजिये। – WebOnLife

+0

सही समाधान वह है जो जोक्विन ने हेडर() और पाद लेख() विधियों को ओवरराइट करने का सुझाव दिया। – WebOnLife

3

मैं प्रयोग किया है:

$pdf->resetHeaderTemplate(); 

यह टेम्पलेट हैडर ओवरराइड और आवश्यकता के अनुसार नया आवंटित करने चाहिए। यह मेरे लिए काम किया।

class MYPDF extends TCPDF { 

    //Page header 
    public function AddNewHeader($newTitle) { 
     $this->header_xobj_autoreset = true; 
     $this->header_title = $newTitle; 
    } 

} 

TCPDF :: setHeaderData फोन करना न भूलें() पहले:

0

मैं इस सबसे हल्का स्पर्श के साथ समाधान हो पाया। इसके बाद, प्रत्येक ऐडपेज() ईवेंट से पहले इस फ़ंक्शन को कॉल करें, या, यदि आप डेटा के माध्यम से लूपिंग कर रहे हैं और पृष्ठों को जोड़ने के लिए tcpdf पर निर्भर हैं, तो प्रत्येक तत्व जोड़ें के बाद इसे कॉल करें।यह हेडर की कैशिंग को तोड़ता है, लेकिन उपयोगकर्ता को प्रत्येक पृष्ठ पर एक नया और कस्टम हेडर डालने की अनुमति देता है। टीसीपीडीएफ :: getHeaderData() द्वारा लौटाए गए सभी तत्व इस तरह से अपडेट किए जा सकते हैं।