TCPDF Some data has already been output to browser, can't send PDF file

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Erik waarom

Erik waarom

06/01/2011 13:52:35
Quote Anchor link
Hallo,

Heeft hier iemand ervaring met tcpdf?

Ik zit met een beetje een onduidelijk probleem. Ik heb tcpdf normaal geinstalleerd. Vervolgens de template aangepast.

Lokaal werkt het helemaal perfect. Maar zodra ik het online zet, krjgt ik een error als:
Warning: Cannot modify header information - headers already sent by (output started at /home/vhosts/erikdw.nl/httpdocs/officeman/php/conn.php:38) in /home/vhosts/erikdw.nl/httpdocs/tcpdf/tcpdf.php on line 8091
TCPDF ERROR: Some data has already been output to browser, can't send PDF file

Nu heb ik al op google gezocht en vind dit probleem vaker, maar nog geen goede oplossing gevonden.

Heeft iemand hier ervaring mee?
 
PHP hulp

PHP hulp

22/12/2024 20:39:16
 
Jens V

Jens V

06/01/2011 13:56:58
Quote Anchor link
Ik heb geen ervaring met tcpdf, maar die error lijkt mij zoiets als de 'headers already sent' foutmelding. Staat je code om het bestand naar de browser te verzenden voor alle output (dus html ofzo)?
Gewijzigd op 06/01/2011 13:57:17 door Jens V
 
- Mark -

- Mark -

06/01/2011 13:57:05
Quote Anchor link
Ik heb geen ervaring met tcpdf maar aan je foutmelding te zien heb je iets tussen je html staan dat er eigenlijk boven hoort te staan. Je hebt dus iets op een verkeerde plek staan in je template.
 
- SanThe -

- SanThe -

06/01/2011 13:59:18
Quote Anchor link
Kijk eens in conn.php op (of rond) regel 38.
 
Erik waarom

Erik waarom

06/01/2011 14:08:12
Quote Anchor link
Bedankt voor de snelle reactie. Ik heb al veel documenten na gekeken, maar kan zelf de fout niet vinden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
97
<?php
include("conn.php");
require_once('../../tcpdf/config/lang/eng.php');
require_once('../../tcpdf/tcpdf.php');

$selectfactuur = mysql_query("SELECT * FROM klanten,factuur,factuurregel WHERE factuur.factuur_id=".$_GET['facid'] ." AND klanten.klant_id=factuur.factuur_klantid AND factuurregel.facregel_factuurid=". $_GET['facid'] ."") or die(mysql_error());

$row = mysql_fetch_array($selectfactuur) or die(mysql_error());
    $klantnaam = $row['klant_naam'];
    $klantadres = $row['klant_adres'];
    $klantpostcode = $row['klant_postcode'];
    $klantbedrijfsnaam = $row['klant_bedrijfsnaam'];
    $factuurnummer = $row['factuur_id'];
    $klantwoonplaats = $row['klant_woonplaats'];
 
class MYPDF extends TCPDF {
    public function Header() {
        $this->setJPEGQuality(90);
        $this->Image('../images/logo.png', 0, 0, 100, 33, 'PNG', 'http://www.google.com');
 
    }

    public function Footer() {
        $this->SetY(-15);
        $this->SetFont(PDF_FONT_NAME_MAIN, 'I', 8);
        $this->Cell(20, 10, 'officeman.com - Facturatie app', 0, false, 'C');
    }

    public function CreateTextBox($textval, $x = 0, $y, $width = 0, $height = 10, $fontsize = 10, $fontstyle = '', $align = 'L') {
        $this->SetXY($x+20, $y); // 20 = margin left
        $this->SetFont(PDF_FONT_NAME_MAIN, $fontstyle, $fontsize);
        $this->Cell($width, $height, $textval, 0, false, $align);
    }
}


// create a PDF object
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
 
// set document (meta) information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Auto Lemmer');
$pdf->SetTitle('Test Factuur');
$pdf->SetSubject('factuur');
$pdf->SetKeywords('TCPDF, PDF, example, tutorial');
 
// add a page
$pdf->AddPage();
 
// create address box
$pdf->CreateTextBox($klantbedrijfsnaam, 0, 55, 80, 10, 10, 'B');
$pdf->CreateTextBox($klantnaam, 0, 60, 80, 10, 10);
$pdf->CreateTextBox($klantadres, 0, 65, 80, 10, 10);
$pdf->CreateTextBox($klantpostcode.",". $klantwoonplaats, 0, 70, 80, 10, 10);
 
// date, order ref
$pdf->CreateTextBox('Date: '.date('d-m-Y'), 0, 65, 0, 10, 10, '', 'R');
$pdf->CreateTextBox('Factuur nummer: '. $factuurnummer, 0, 70, 0, 10, 10, '', 'R');

// list headers
$pdf->CreateTextBox('Aantal', 0, 90, 20, 10, 10, 'B', 'C');
$pdf->CreateTextBox('Product/Service omschrijving', 20, 90, 90, 10, 10, 'B');
$pdf->CreateTextBox('Prijs', 110, 90, 30, 10, 10, 'B', 'R');
$pdf->CreateTextBox('Totaal', 140, 90, 30, 10, 10, 'B', 'R');
 
$pdf->Line(20, 99, 195, 99);
 
// some example data


while($row = mysql_fetch_array($selectfactuur)){
    $orders[] = array('quant' => $row['facregel_aantal'], 'descr' => $row['facregel_omschrijving'], 'price' => $row['facregel_prijsexcl']);
}

 
$currY = 98;
$total = 0;
foreach ($orders as $row) {
    $pdf->CreateTextBox($row['quant'], 0, $currY, 20, 10, 10, '', 'C');
    $pdf->CreateTextBox($row['descr'], 20, $currY, 90, 10, 10, '');
    $pdf->CreateTextBox('$'.$row['price'], 110, $currY, 30, 10, 10, '', 'R');
    $amount = $row['quant']*$row['price'];
    $pdf->CreateTextBox('$'.$amount, 140, $currY, 30, 10, 10, '', 'R');
    $currY = $currY+5;
    $total = $total+$amount;
}

$pdf->Line(20, $currY+4, 195, $currY+4);
// output the total row
$pdf->CreateTextBox('Total', 20, $currY+5, 135, 10, 10, 'B', 'R');
$pdf->CreateTextBox('$'.number_format($total, 2, '.', ''), 140, $currY+5, 30, 10, 10, 'B', 'R');
 
// some payment instructions or information
$pdf->setXY(20, $currY+30);
$pdf->SetFont(PDF_FONT_NAME_MAIN, '', 10);
$pdf->MultiCell(175, 10, '<em>Lorem ipsum dolor sit amet, consectetur adipiscing elit</em>. <br />
Vestibulum sagittis venenatis urna, in pellentesque ipsum pulvinar eu. In nec <a href="http://www.google.com/">nulla libero</a>, eu sagittis diam. Aenean egestas pharetra urna, et tristique metus egestas nec. Aliquam erat volutpat. Fusce pretium dapibus tellus.'
, 0, 'L', 0, 1, '', '', true, null, true);
 
//Close and output PDF document
ob_clean();    
$pdf->Output('test.pdf', 'D');
?>



Dit is de aangepaste conn.php.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    session_start();
              
                $dbname = "";
                $user = "";
                $pass = "";
                $host = "";
              
                $to = "@gmail.nl";
                $subject = "";
                $from = ">";
    if (!mysql_select_db($dbname, mysql_connect($host, $user, $pass)))
    {

        if (!$_SESSION["dberror"])
        {
        }

        exit();
    }

?>



Ik kan zelf niet de fout vinden. Normaal heb ik in de conn.php ook de foutmeldingen staan als output. Maar voor de zekerheid weggehaald.
 
Chris -

Chris -

06/01/2011 14:18:23
Quote Anchor link
Wat staat er precies op conn.php regel 38?
 
TJVB tvb

TJVB tvb

06/01/2011 14:20:57
Quote Anchor link
Warning: Cannot modify header information - headers already sent by (output started at /home/vhosts/erikdw.nl/httpdocs/officeman/php/conn.php:38) in /home/vhosts/erikdw.nl/httpdocs/tcpdf/tcpdf.php on line 8091
TCPDF ERROR: Some data has already been output to browser, can't send PDF file

Dit zegt dat je op regel 38 van conn.php als output hebt naar de browser (html, spaties, .. ..)
Dat mag niet omdat tcpdf je headers wil aanpassen. Dat is de reden dat er gevraagd wordt naar wat je op regel 38 van conn.php hebt staan.
 
John D

John D

06/01/2011 14:26:17
Quote Anchor link
Het is niet de fout maar de ob_clean(); is wel een vreemde eend in bijt.
Waar hier ob_clean(); gebruikt?
 
Erik waarom

Erik waarom

06/01/2011 14:33:08
Quote Anchor link
aaaaaaaa, ik heb het gevonden. Dank jullie wel:).

Regel 38 is het sluit teken van php ?>, ik had daar al eens naar gekeken en ook al vervangen. Maar er stond nog steeds een spatie achter:S. Weer paar uurtjes zoeken voor een spatie:s.

Bedankt!
 
Bas Cost Budde

Bas Cost Budde

06/01/2011 16:15:17
Quote Anchor link
Jij hebt de beste reden gevonden om in een include-bestand de php-sluittag achterwege te laten :)
 
Matt Me

Matt Me

05/11/2011 21:03:46
Quote Anchor link
Heb jij bij dit script toevallig voor elkaar gekregen dat je een nieuwe pagina krijgt, dus je currY aangepast wordt als je over pagina 1 heen gaat met je rows ?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.