f00b Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 Jeg har installert WAMP5, og satt opp en PHP & MySQL side. I WAMP har jeg aktivert noe som heter php_pdf - Jeg tror dette er det samme som PHPLib. Målet mitt her er å kunne generere PDF dokumenter utifra MySQL queries. Nedenfor er en kode som genererer et PDF dokument med to linjer tekst, og en strek oppe og nede i dokumentet: <?php // Opprett pdf dokumentet $pdf = pdf_new(); // Åpne pdf dokumentet pdf_open_file($pdf,"c:\adobedok.pdf"); // Sett info pdf_set_info($pdf, "Author", "Mitt navn"); pdf_set_info($pdf, "Title", "Test"); pdf_set_info($pdf, "Creator", "Test"); pdf_set_info($pdf, "Subject", "Test"); // Opprett en A4 side pdf_begin_page($pdf, 595, 842); // Sett skrifttype $font = PDF_load_font($pdf, "Courier","iso8859-1", ""); // Lag linje øverst på siden pdf_setfont($pdf, $font, 10); pdf_moveto($pdf, 20, 780); pdf_lineto($pdf, 575, 780); pdf_stroke($pdf); // Setter logo i venstre hjørne //$logo = pdf_open_image_file($pdf, "bmp", "logo.bmp", "", 0); //PDF_fit_image($pdf, $logo, 50, 785, "scale 0.5") // Tekst pdf_show_xy($pdf, "Linje 1", 50, 750); pdf_show_xy($pdf, "Linje 2", 50, 730); // Lag linje på bunnen av siden pdf_moveto($pdf, 20, 50); pdf_lineto($pdf, 575, 50); pdf_stroke($pdf); // Avslutt og lagre filen pdf_end_page($pdf); pdf_close($pdf); pdf_delete($pdf); ?> Denne fungerer, men dersom jeg f.eks. har lyst til å erstatte "Linje 2" med en linje fra MySQL databasen så har jeg forsøkt å erstatte pdf_show_xy($pdf, "Linje 2", 50, 730); med pdf_show_xy($pdf, $row['adresse']);. Da får jeg følgende feil; Fatal error: Uncaught exception 'PDFlibException' with message 'pdf_show_xy() expects exactly 4 parameters, 2 given' in C:\Wamp\www\badehuset\createpdf.php:32 Stack trace: #0 C:\Wamp\www\badehuset\createpdf.php(32): pdf_show_xy(Resource id #2, NULL) #1 {main} thrown in C:\Wamp\www\badehuset\createpdf.php on line 32 Jeg kan ikke så mye PHP, så jeg har holdt på i et ukjent antall timer og prøvd meg frem med koder jeg har funnet på google. Denne tråden er bare resultat av jeg begynner å gå utrolig lei, og ønsker litt bistand - min prøv-og-feil strategi hjelper meg svært lite. Så jeg hadde satt utrolig stor pris på litt hjelp her, vet ikke om det er så mange som har testet ut PHP&MySQL&PDF - tipper det ikke er så mange, men prøver alikevel Lenke til kommentar
AlecTBM Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 Du burde lære deg å lese feilmeldinger Fatal error: Uncaught exception 'PDFlibException' with message 'pdf_show_xy() expects exactly 4 parameters, 2 given Sjekk på php.net etter hva som må være med Lenke til kommentar
f00b Skrevet 2. juli 2008 Forfatter Del Skrevet 2. juli 2008 (endret) Du burde lære deg å lese feilmeldingerFatal error: Uncaught exception 'PDFlibException' with message 'pdf_show_xy() expects exactly 4 parameters, 2 given Sjekk på php.net etter hva som må være med Men det er det jeg ikke skjønner, hvorfor må det være fire argumenter? Finner ikke noe på php.net ved å søke på feilmeldingen, hva skal jeg søke etter? Endret 2. juli 2008 av f00b Lenke til kommentar
AlecTBM Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 (endret) Du skal ikke søke på feilmeldingen Du skal søke etter funksjonen. Som i dette tilfellet da er pdf_show_xy() EDIT: Tok meg nettopp 10 sekunder å finne svaret PDF_show_xy ( resource $p , string $text , float $x , float $y ) Du har kun resource og string. men du sier ikke hvor du vil ha string dermed x og y Endret 2. juli 2008 av AlecTBM Lenke til kommentar
Jonas Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 (endret) Ehh ... æhh ... Har du tatt en titt på hva du selv skriver? I eksempelet markert med blå skrift gir du fire parametre, hvor de to siste representerer x- og y-kordinater. I eksempelet markert med rød tekst gir du kun to parametre og får feilmelding. Hva kan dette bety? Du spør hvorfor det må være fire argumenter. Er det ikke åpenbart? Du kan ikke tegne på en overflate uten å oppgi hvor du skal tegne. Du skal for øvrig søke etter funksjonsnavn. Da får dokumentasjon som omhandler problemet ditt. http://no2.php.net/pdf_show_xy pdf_show_xy($pdf, $row['adresse'], 50, 730); Endret 2. juli 2008 av Jonas Lenke til kommentar
f00b Skrevet 3. juli 2008 Forfatter Del Skrevet 3. juli 2008 Skjønner logikken nå Har faktisk prøvd dette også tidligere, den klarte da å generere dokumentet uten feil - men på pdf dokumentet som hadde blitt generert så var ikke dataene som ligger i 'adresse' i mysql databasen med. Jeg har imidlertid fått løst problemet nå <?php // Hent konfig for tilkobling til database session_start(); include "includes/config.php"; $result = mysql_query("SELECT * FROM database"); ?> <?php // Opprett pdf dokumentet $pdf = pdf_new(); // Åpne pdf dokumentet pdf_open_file($pdf,"c:\pdfdokument.pdf"); // Sett info pdf_set_info($pdf, "Author", "Test"); pdf_set_info($pdf, "Title", "Test"); pdf_set_info($pdf, "Creator", "Test"); pdf_set_info($pdf, "Subject", "Test"); // Opprett en A4 side pdf_begin_page($pdf, 595, 842); // Sett skrifttyper $font1 = PDF_load_font($pdf, "Courier-Bold","iso8859-1", ""); $font2 = PDF_load_font($pdf, "Courier","iso8859-1", ""); // Lag linje øverst på siden pdf_moveto($pdf, 20, 780); pdf_lineto($pdf, 575, 780); pdf_stroke($pdf); // Setter logo i venstre hjørne //$logo = pdf_open_image_file($pdf, "bmp", "logo.bmp", "", 0); //PDF_fit_image($pdf, $logo, 50, 785, "scale 0.5") // Statisk overskrift pdf_setfont($pdf, $font1, 12); PDF_set_parameter($pdf, "underline","true"); pdf_show_xy($pdf, "Generell info", 50, 750); // Statisk tekst pdf_setfont($pdf, $font1, 10); PDF_set_parameter($pdf, "underline","false"); pdf_show_xy($pdf, "Navn:", 50, 730); pdf_show_xy($pdf, "Telefon:", 50, 710); pdf_show_xy($pdf, "Kontakt:", 50, 690); // Dynamisk tekst pdf_setfont($pdf, $font2, 10); while($row = mysql_fetch_array( $result )) { pdf_show_xy($pdf, $row['navn'], 150, 730); pdf_show_xy($pdf, $row['tlf'], 150, 710); pdf_show_xy($pdf, $row['kontakt'], 150, 690); } // Lag linje på bunnen av siden pdf_moveto($pdf, 20, 50); pdf_lineto($pdf, 575, 50); pdf_stroke($pdf); // Avslutt og lagre filen pdf_end_page($pdf); pdf_close($pdf); pdf_delete($pdf); ?> Jeg lurer på en annen ting, dette har jeg søkt mye etter uten å finne noenting på - så jeg vet ikke om det er mulig. Men er det mulig å legge inn en kode som åpner pdf dokumentet etter den er ferdig generert? Lenke til kommentar
f00b Skrevet 3. juli 2008 Forfatter Del Skrevet 3. juli 2008 (endret) readfile($pdf); ?? Du er god Det er litt problemer da, når jeg generer pdf filen i firefox så fungerer det, men dersom jeg bruker internet explorer (7), så viser den bare teksten som om den var åpnet i notepad. %PDF-1.4 %äãÏÒ 3 0 obj <> stream xœe‘ANÃ0E÷>Å,Ã&;uj±#eÃá ei [NȽÇEuÙ–Æž÷¿õ5 ac>…Þè©râU4V¬¶RíÅ£ßË~„fxmJø\Wü”nQòE—„Èñ±Œ±Å³(žÈÓ‘œƒÁ÷‡;»KöísM•48išSö{ßžý}TäœÔ‘»#ù@ǃ“Wñûåÿ>vm8Ì‘Ú$›‡sGŽ¡E¿Æü›õ7D…WĺÞn±ÕVÎÊkÄ¢i;ú8ÀÒr[™Œ½oA\â¡*y+D3'þÓU±Á3T3¥9ë4æ?¢ðx endstream endobj 4 0 obj 243 endobj 2 0 obj <> endobj 7 0 obj <> >> endobj 8 0 obj <> endobj 5 0 obj <> endobj 9 0 obj <> endobj 6 0 obj <> endobj 9 0 obj <> endobj 1 0 obj <> endobj 10 0 obj <> endobj xref 0 11 0000000000 65535 f 0000001687 00000 n 0000000349 00000 n 0000000015 00000 n 0000000330 00000 n 0000000762 00000 n 0000001227 00000 n 0000000452 00000 n 0000000543 00000 n 0000001307 00000 n 0000001741 00000 n trailer <<0DD026D2DDDA76AC016E4BFEE11D8DCB>] >> startxref 1789 %%EOF Her er koden jeg bruker <?php header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="dokument.pdf"'); readfile('c:\dokument.pdf'); ?> Endret 3. juli 2008 av f00b Lenke til kommentar
AlecTBM Skrevet 3. juli 2008 Del Skrevet 3. juli 2008 (endret) kan være fordi at fila heter .php microsoft liker jo filendelser kan fikse et lite .htaccess script EDIT: <FilesMatch "c:\dokument.pdf$"> SetHandler application/x-httpd-php </FilesMatch> og prøv å sett echo $pdf; før pdf_delete($pdf); !!WARNING!! Har ikke testa dette Endret 3. juli 2008 av AlecTBM Lenke til kommentar
f00b Skrevet 3. juli 2008 Forfatter Del Skrevet 3. juli 2008 kan være fordi at fila heter .phpmicrosoft liker jo filendelser kan fikse et lite .htaccess script EDIT: <FilesMatch "c:\dokument.pdf$"> SetHandler application/x-httpd-php </FilesMatch> og prøv å sett echo $pdf; før pdf_delete($pdf); !!WARNING!! Har ikke testa dette Puh, da har jeg fått laget en .htaccess og lagt den under '.$_SERVER['DOCUMENT_ROOT']; (c:\wamp\www), jeg har skrevet inn scriptet du ga meg. Men er jeg nødt til å definere at den skal hente .htaccess filen på slutten av php scriptet? Det skjer iallefall ingenting annet enn at den sier Resource id #5 nå. Det er "echo $pdf;" som gjør at denne meldingen kommer. Lenke til kommentar
AlecTBM Skrevet 3. juli 2008 Del Skrevet 3. juli 2008 ok Drit i echo $pdf; da Uten da? Lenke til kommentar
Jonas Skrevet 3. juli 2008 Del Skrevet 3. juli 2008 (endret) readfile() skal fungerer, mulig IE7 bare trenger et par ekstra headers. Bruker selv følgende headers i et attachment-system jeg har. Kan samtidig være lurt å sette filesize, slik at du få en progressbar i nettleseren du laster ned med. header ( 'Content-Description: File Transfer' ); header ( 'Content-Type: application/octet-stream' ); header ( 'Content-Transfer-Encoding: binary' ); header ( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); header ( 'Content-Disposition: attachment; filename="' . $filename . '";' ); header ( 'Content-Length: ' . filesize ( $filepath ) ); Endret 3. juli 2008 av Jonas Lenke til kommentar
f00b Skrevet 3. juli 2008 Forfatter Del Skrevet 3. juli 2008 okDrit i echo $pdf; da Uten da? Det fungerte ikke heller readfile() skal fungerer, mulig IE7 bare trenger et par ekstra headers. Bruker selv følgende headers i et attachment-system jeg har. Kan samtidig være lurt å sette filesize, slik at du få en progressbar i nettleseren du laster ned med. header ( 'Content-Description: File Transfer' ); header ( 'Content-Type: application/octet-stream' ); header ( 'Content-Transfer-Encoding: binary' ); header ( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); header ( 'Content-Disposition: attachment; filename="' . $filename . '";' ); header ( 'Content-Length: ' . filesize ( $filepath ) ); Dette derimot, løste problemet! Tusen takk! Lenke til kommentar
f00b Skrevet 4. juli 2008 Forfatter Del Skrevet 4. juli 2008 (endret) Et spørsmål til Jeg har plassert en link på siden, som peker til php scriptet jeg har laget som genererer PDF dokumentet - tingen er at når jeg trykker på denne så genererer den alt innholdet i hele databasen. Så jeg prøvde følgende: $result = mysql_query("SELECT * FROM database WHERE id=1"); Ved å gjøre dette så tar den kun med innholdet i posten med id 1, så det jeg prøver å få til er at den skal finne ut hvilken id jeg er på, slik at jeg f.eks. da kan skrive f.eks. $current_id istedenfor "1". Jeg forsøkte å legge til dette: $current_id=$_GET['id']; $result = mysql_query("SELECT * FROM database WHERE id=$current_id"); Men da ser det ikke ut til at den klarer å hente noe data idetheletatt. PDF dokumentet skriver kun den statiske teksten, men ingenting av dataene i MySQL basen. Endret 4. juli 2008 av f00b Lenke til kommentar
f00b Skrevet 4. juli 2008 Forfatter Del Skrevet 4. juli 2008 (endret) prøv ' rundt variabelen $current_id=$_GET['id']; $result = mysql_query("SELECT * FROM 'database' WHERE 'id'='$current_id'"); Fungerer heller ikke Endret 4. juli 2008 av f00b Lenke til kommentar
AlecTBM Skrevet 4. juli 2008 Del Skrevet 4. juli 2008 rundt variabelen ikke alt. $current_id=1; $result = mysql_query("SELECT * FROM database WHERE id='$current_id' "); prøv det da Lenke til kommentar
f00b Skrevet 4. juli 2008 Forfatter Del Skrevet 4. juli 2008 $current_id=1;$result = mysql_query("SELECT * FROM database WHERE id='$current_id' "); Det fungerer, men da viser den kun id 1 Lenke til kommentar
AlecTBM Skrevet 4. juli 2008 Del Skrevet 4. juli 2008 Hva trur du jeg gjorde? bytta ut $_GET['id'] med 1 $current_id=$_GET['id']; prøv den nå Lenke til kommentar
f00b Skrevet 4. juli 2008 Forfatter Del Skrevet 4. juli 2008 Hva trur du jeg gjorde?bytta ut $_GET['id'] med 1 $current_id=$_GET['id']; prøv den nå Prøvde det samtidig, vet at du gjorde det bare for å sjekke om definisjonen fungerte. Det gjør den, men $_GET['id'] fungerer ikke. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå