Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> fpdf + imagepng
Czadus
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post
Czadus
post
Post #3





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:29