[PHP] Met behulp van TCPDF meerdere PDF documenten genereren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Ik probeer middels TCPDF enkele .PDF bestanden te genereren en op te slaan op de server. Nu heb ik een eigen functie gemaakt die het .PDF bestand genereert en vervolgens de content van het .PDF bestand in een array zet. Vervolgens loop ik door de array heen om de bestanden 1 voor 1 op de server te zetten.

Nu krijg ik altijd om één of andere reden dat het 1e bestand gewoon goed werkt en het 2e aangemaakte bestand alleen een blanco pagina toont.

Als ik de content van het PDF bestand bekijk (Wat voor een overgroot deel onleesbaar is) zie ik ook geen opvallende afwijkingen.

Wie weet wat ik nu dus fout doe?

Overigens staat in "pdf_brief.php" alleen het woordje "Hoi". Bij het 1e aangemaakte .PDF bestand staat dit wel in het document. Bij het 2e aangemaakte bestand krijg ik dus niets te zien (blanco).

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
session_start();

function createPDF($content='',$output='',$author='',$title='',$subject='',$keywords='', $secured) {
    require_once('tcpdf/config/lang/eng.php');
    require_once('tcpdf/tcpdf.php');
    
    // create new PDF document
    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, 'A4', true, 'UTF-8', false);
    
    // set document information
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor($author);
    $pdf->SetTitle($title);
    $pdf->SetSubject($subject);
    $pdf->SetKeywords($keywords);
    
    // Set PDF protection (encryption)
    if ($secured == true) {
        $pdf->SetProtection($permissions=array('modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble'), $user_pass='', $owner_pass=null, $mode=1, $pubkeys=null);
    }
    
    // remove default header/footer
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    
    // set default monospaced font
    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

    //set margins
    $pdf->SetMargins(20, PDF_MARGIN_TOP, 20);
    $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
    $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
    
    //set auto page breaks
    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
        
    //set image scale factor
    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
    
    //set some language-dependent strings
    $pdf->setLanguageArray($l);
    
    // add a page
    $pdf->AddPage();
    
    // Get HTML content
    ob_start();
                
    switch ($content) {
        case "brief": require_once('pdf_brief.php'); break;
    }
    
    // Ophalen en opruimen
    $html = ob_get_contents();
    ob_end_clean();
    
    // output the HTML content
    $pdf->writeHTML($html, true, false, true, false, '');
    
    // reset pointer to the last page
    $pdf->lastPage();
    
    //Close and output PDF document
    switch ($output) {
        case "stream": return $pdf->Output('', 'S'); break;
        case "inline": return $pdf->Output(''.$subject.'.pdf', 'I'); break;
        case "download": return $pdf->Output(''.$subject.'.pdf', 'D'); break;
    }
}

// Brief 1
if ($_SESSION['brief_1'] == "Ja") {
    $pdf = createPDF('brief','stream','','Brief 1','','',true);
    $bijlagen[] = array("content"=>$pdf, "naam"=>"Brief 1.pdf", "type"=>"stream");
}

// Brief 2
if ($_SESSION['brief_2'] == "Ja") {
    $pdf = createPDF('brief','stream','','Brief 2','','',true);
    $bijlagen[] = array("content"=>$pdf, "naam"=>"Brief 2.pdf", "type"=>"stream");
}


//echo '<pre>', print_r($bijlagen) ,'</pre>';

foreach($bijlagen as $bijlage) {
    if ($bijlage['type'] == "stream") {
        //echo "<pre>".$bijlage['content']."</pre>";
        $dir = strtolower($_SERVER['DOCUMENT_ROOT']."/test_pdf/");
        if (!file_exists($dir)) { mkdir(str_replace('//','/',$dir), 0777, true); }
        $filename = str_replace('//','/',strtolower($dir."/".$bijlage['naam']));
        $fp = fopen($filename, "a");
        fwrite($fp, $bijlage['content']);
        fclose($fp);
    }
}

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Zijn er PHP errors, warnings, notices?

Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 20:37
Je doet een require_once in een functie, maar roept die functie twee keer aan. Ergo, de tweede keer zal er niks worden ge'required, want dat was al een keer gedaan.

Nou vind ik die manier van output buffering en includen / requiren sowieso niet zo geweldig eruit zien, maar dat veranderen naar include / require [bestand] zal waarschijnlijk wel de oplossing bieden.

[ Voor 36% gewijzigd door OnTracK op 08-10-2010 18:05 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 18-09 19:18
OnTracK schreef op vrijdag 08 oktober 2010 @ 18:04:
Nou vind ik die manier van output buffering en includen / requiren sowieso niet zo geweldig eruit zien, maar dat veranderen naar include / require [bestand] zal waarschijnlijk wel de oplossing bieden.
Misschien is het nog handiger om die require_once voor de tcpdf buiten de functie scope te zetten. ;)

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Het gaat om de require_once van pdf_brief.php, niet om die van tcpdf, dat kan opzich geen kwaad.

Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
OnTracK schreef op vrijdag 08 oktober 2010 @ 18:04:
Je doet een require_once in een functie, maar roept die functie twee keer aan. Ergo, de tweede keer zal er niks worden ge'required, want dat was al een keer gedaan.

Nou vind ik die manier van output buffering en includen / requiren sowieso niet zo geweldig eruit zien, maar dat veranderen naar include / require [bestand] zal waarschijnlijk wel de oplossing bieden.
Je had gelijk, het was de require_once van pdf_brief.php. |:(
Thanks!
Pagina: 1