Avatar billede KurtG Forsker
30. november 2019 - 12:54 Der er 8 kommentarer

Browser viser ikke pdf-fil

Jeg er i tvivl, om dette spørgsmål hører til her eller i Browser.
Jeg bruger Firefox men også prøvet MS Edge, men med samme resultat.
Jeg har et PHP-program, som danner nogle medlemskort i en pdf-fil ved hjælp af FPDF.
Når filen downloades, vises den korrekt i Adope Reader, men sender jeg output fra programmet til skærmen, vises der en masse mystiske tegn.
Jeg har prøvet at bruge Firefox's indbyggede PDF-reader og ligeledes med Adopes reader, men begge viser forkert.
Derfor tror jeg, at det er mit program.
I kan se skærmbillede og pdf-udsnit på http://kg2.dk/PDF.htm
Samme sted er programmet listet!
Avatar billede Slater Ekspert
30. november 2019 - 13:04 #1
Hvis den er dannet i PHP, husker du at sætte din Content-Type header når du viser filen? Ellers ved browseren ikke hvilken filtype den skal opfatte det som.
Avatar billede KurtG Forsker
30. november 2019 - 18:48 #2
Det har jeg nok ikke, jeg kan ikke finde nogen!
Hvor skal den anbringes og hvad skal der stå i linjen!
Avatar billede Slater Ekspert
30. november 2019 - 19:00 #3
Det er svært at sige uden at vide hvordan din kode ser ud, men du kan prøve der hvor du sender outputtet at skrive:

header('Content-Type: application/pdf');

Det skal bare stå før hvor dataene udskrives til skærmen. Hvis det ikke virker, kan du beskrive hvordan du sender outputtet til skærmen, som du siger?
Avatar billede KurtG Forsker
30. november 2019 - 20:29 #4
Det hjalp ikke.
Her er programmet:

<?php
    header('Content-Type: application/pdf');
    $pdf = new FPDF();
    $pdf->SetMargins(1,1);
    $pdf->SetAutoPageBreak(false);
    $DetteAar = 'Aar'.$detteaar;
    require "FindKasserer.php";        //Hent kassererens navn    i $kasserernavn

    //    Hent data fra tabellen
    $T1 = "Medlemskort ".$detteaar."\nVinderup Egnshistoriske Forening";
    $LoopNr = 1;
    $taeller = 0;
    $defaultY = 0;
    $y_offset = $defaultY;
    $SqlStr = 'SELECT * FROM '.$tabel.' WHERE M_type <= 2 AND '.$DetteAar.' != 0 ORDER BY Nr';    //DetteAar er årstallet for kontingentbetalt
    $data3 = mysqli_query($forbindelsen,$SqlStr) or die(mysqli_error());  //Puts it into an array
    while($info = mysqli_fetch_array($data3))
    {
        $navnearray[$taeller] = trim(utf8_decode($info['Fnavn']." ".$info['Enavn']));
        $adressearray[$taeller] = trim(utf8_decode($info["Adresse1"].' '.$info["Adresse2"]));
        $adressearray2[$taeller] = trim(utf8_decode($info["PostNr"].' '.$info["PostDistrikt"]));
        $MedNrarray[$taeller] = trim($info["Nr"]);
        $taeller++;
    }
    //    Flet data til A4-side med 5 medlemskort på hver side
    $pdf->AddPage();
    for($i=0; $i < count($navnearray); $i++)
    {
        $pdf->SetFont("Times","",12);
        $pdf->Rect(20,17+$y_offset,85,54);  //  Venstre firkant med billedet
        $pdf->Image("VEF-LOGO-400.gif",23,25+$y_offset,80);
        $pdf->Rect(105,17+$y_offset,85,54);    //Højre firkant med navn mm
        $pdf->SetXY(105,25+$y_offset);
        $pdf->MultiCell(85,7,$T1,0,"C");    //    Medlemskort tekst
        $pdf->SetFont("Times","",12);
        $pdf->SetXY(105,45+$y_offset);
        $pdf->MultiCell(85,5,$navnearray[$i]."\n".$adressearray[$i]."\n".$adressearray2[$i],0,"C");    //    Navn og adresse
        $pdf->SetFont("Times","",8);
        $pdf->SetXY(105,60+$y_offset);
        $pdf->MultiCell(85,5,"Medlemsnummer: ".$MedNrarray[$i],0,"C");            //    Medlemsnummer
        $pdf->SetXY(105,65+$y_offset);
        $pdf->MultiCell(82,5,date("j-n Y"),0,"R");            //    dato
        if(($i+1) % 4 == 0)
        {
            $LoopNr++;
            $pdf->AddPage();
            $y_offset = $defaultY;
        }
        $y_offset = $y_offset + 54;
    }
//    $pdf->Output("ListAlleBetalte.pdf","F");
    $pdf->Output();
?>
Avatar billede nemlig Professor
01. december 2019 - 22:52 #5
Det ser ikke ud til, at du har indlæst FPDF-class'en.
Prøv at starte med dette og fjern din header(), da class'en burde klare den del:
require 'fpdf.php'; //linket til din FPDF-class
class PDF extends FPDF
{
//Her har jeg defineret nogle functioner, jeg bruger i min PDF-generering
}
$pdf = new FPDF();
$pdf->SetMargins(1,1);
.......
Avatar billede KurtG Forsker
01. december 2019 - 23:15 #6
Hmm, der skal jeg vist have noget mere hjælp!

Det listede program blev kaldt af et andet, hvor der i starten står:
<?php   
    require('FPDF/fpdf.php');
og senere bliver det listede program kaldt af:
    if (isset($_POST['SkrivAlleBetalte']))                                { require 'SkrivAlleBetalte.php';    }
     
Hvis jeg indsætter:
class PDF extends FPDF
{
efter
    require('FPDF/fpdf.php');
skal jeg nok have noget inden jeg afslutter med }, og det aner jeg ikke hvad skal være.
Skal det være de funktioner, som jeg vil bruge, der skal defineres, inden de kan bruges?
Avatar billede acore Ekspert
02. december 2019 - 07:40 #7
Hvis den genererer pdf'en, er det nok ikke det i #5, der er problemet.

Kan du give et direkte link til den side, der fejler, så vi kans e header mv?

Hvad sker der, hvis du åbner en af dine genererede pdf-filer i din browser? Hvis det virker, kunne det tyde på, at det er noget med headeren, som slatere r inde på.

Du kan så prøve at er starte din kode med vising af en eksisterende pdf-fil, som du ved kan vises i en browser. Hvis det iikke virker, bekræfter det den teori. Hvis det virker, så tænker vi videre.
Avatar billede KurtG Forsker
02. december 2019 - 11:16 #8
Hvis jeg bruger
$pdf->Output("ListAlleBetalte.pdf","F");
dannes der fint en fil, som jer fuldt læsbar, se http://kg2.dk/PDF.htm nederst.
Med
$pdf->Output();
dannes der det billede på skærmen, som ses øverst på samme side.
Jeg kan ikke få min browser (Firefox) til at vise filen
ListAlleBetalte.pdf
direkte, jeg må bruge Adope Reader.
I kan roligt prøve jer frem med den side som linken viser frem til, der er kun en testdatabase.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester