Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: fpdf + imagepng
Forum PHP.pl > Forum > PHP
Czadus
Witam,

tworząc plik PDF napotkałem na pewien problem. Otóż do tworzonego dokumentu chcę dodać obrazek, nieistotny jest jego typ, a głównie to, że jest on tworzony w locie, co widoczne jest w funkcji createPNG, jej kod zawarłem poniżej. Tablica $images zawiera fizyczne ścieżki do plików png, z których tworzony jest jeden wyjściowy. I tutaj wszystko działa poprawnie do momentu, kiedy funkcja ta jest parametrem metody klasy fpdf->Image(). Otrzymuję komunikat błędu: FPDF error: Image file has no extension and no type was specified. Sam w sobie błąd oczywiście rozumiem, jednak, niebardzo wiem, w jaki sposób mogę go rozwiązać, obejść, czy istnieje osoba, która jest w stanie mi pomóc?

Dodanie obrazka do pliku pdf.
Kod
$pdf->Image($this->createPNG($tableImages2PDF),160,65,20);


Kod tworzący obrazek.
Kod
$obrazek = @imagecreatefrompng('./files/framework/createPngBg.png');color(2000, 2000);

for($i=0;$i<sizeof($images);++$i){
    list($width, $height, $type, $attr) = @getimagesize($images[$i]);
    $images[$i] = @imagecreatefrompng($images[$i]);
    
    $sizes[$i][0]=$width;
    $sizes[$i][1]=$height;
}

$imgWidth=ustawienia::$modelWidth;
$imgHeight=ustawienia::$modelHeight;
if(sizeof($sizes)>0){
    $imgWidth=$sizes[0][0];
    $imgHeight=$sizes[0][1];
}

for($i=0;$i<sizeof($images);++$i) {
    imagecolortransparent($images[$i],imagecolorexact($images[$i],0,0,0));
    imagealphablending($images[$i], false); imagesavealpha($images[$i], true);
}

for($i=0;$i<sizeof($images);++$i) {
    ImageCopyResampled($obrazek ,$images[$i], 0, 0, 0, 0, $imgWidth, $imgHeight, $imgWidth, $imgHeight);
}

@imagealphablending($obrazek, false);
@imagesavealpha($obrazek, true);
@imagepng($obrazek, NULL);

for($i=0;$i<sizeof($images);++$i)
    @imagedestroy($images[$i]);
@imagedestroy($obrazek);
thek
A więc pewnie Twoim rozwiązaniem będzie w owym skrypcie ustawienie odpowiednich nagłówków -> header. W ten sposób poinformujesz fpdf z czym ma do czynienia. Zastanawiam się jedynie czy fpdf będzie nadal "żądał" rozszerzenia. Bo typ mu nagłówkami zapewnisz do rozpoznania.
Czadus
W momencie tworzenia w locie obrazka, ustawiając mu header image/png powodowałem, że na ekranie pojawiał się po prostu obrazek, plik pdf nie został już utworzony, natomiast bez header-a mam problem, ponieważ metoda Image klasy FPDF oczekuje pliku z odpowiednim rozszerzeniem i o odpowiednim typie. Pozostaje opcja przejściowa, tworzyć plik fizycznie na serwerze, dodawać go do pdf-a a następnie go usuwać. Wolałbym jednak tego typu "przekrętów" unikać.
erix
Bez edycji źródeł FPDF raczej tego nie zrobisz.

FPDF wymusza to z pewnego powodu - jeśli użyjesz w kilku miejscach tego samego obrazu, zasób jest wstawiany jednokrotnie, a dodawane są tylko odpowiednie kotwice. W każdym razie - chyba nie ma możliwości, aby wstawić bezpośrednio z zasobu. Albo przeciąż klasę do obrazu, albo lepiej zapisać do pliku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.