2014-11-21 28 views
6

Używam TCPDF do tworzenia dynamicznie generowanego pliku pdf. W moim pliku PDF obraz jest generowany na podstawie danych wprowadzonych przez użytkownika i chcę dodać ten obraz do mojego pliku pdf. Oto mój kodBłąd TCPDF: Nie można uzyskać rozmiaru obrazu

$map_image = "example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area="; 

$pdf->Image ($map_image, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false); 

Jeśli i wklej "example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary & suit_type = & min_area = & max_area =" to na moim Url tworzy obraz tak, jak chciałem, ale jeśli umieści ten adres URL, to nie zadziała. Mówi Nie można uzyskać rozmiar obrazu

Ale jeśli mogę umieścić coś w tym

$map_image = '/wp-content/themes/v3/resources/images/public/logo_side.jpg'; 

to może wygenerować pdf z tym obrazem pomyślnie.

Jak mogę to rozwiązać?

Odwiedziłam następujące stackoverflow linku, ale nic z tego nie przyszło do jakiejkolwiek pomocy

tcpdf working on localhost but not on my sever giving error TCPDF ERROR: [Image] Unable to get image:

cakephp tcpdf image error [Image] Unable to get image

TCPDF ERROR: [Image] Unable to get image

Odpowiedz

10

Może to być spowodowane filesize() nie ustanawiając stat() zdalnego plik obrazu poprzez HTTP wrapper (ponieważ opakowanie go nie obsługuje).

Zgodnie z TCPDF image() method documentation możesz przekazać dane obrazu bezpośrednio, poprzedzając je symbolem @. Więc można dostać surowe dane obrazu, a następnie przekazać je do TCPDF tak:

$img = file_get_contents('http://example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area='); 

$pdf->Image('@' . $img, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false); 

Zauważ, że nie testowałem tego (a dokumentacja TCPDF jest rzadki), więc może trzeba trochę poeksperymentować, aby uzyskać to działa poprawnie.


Edit:

Jest to przykład w pełni funkcjonalny (na moim komputerze). Użyj tej opcji, aby sprawdzić, czy uda Ci się odzyskać obraz i wyświetlić plik PDF w przeglądarce. Oczywiście musisz ustawić znaną prawidłową ścieżkę dla obrazu!

<?php 

require './tcpdf/tcpdf.php'; 

$pdf = new TCPDF(); 

$pdf->AddPage(); 

$img = file_get_contents('http://path/to/your.jpg'); 
$pdf->Image('@' . $img); 

$pdf->Output(); 

?> 
4

Potwierdź, że serwer jest w stanie wykorzystać PHP file_get_contents lub cURL aby pobrać plik. "Nie można uzyskać rozmiaru obrazu" jest pierwszym błędem funkcji Image, który zostanie wysłany przez TCPDF, jeśli plik nie będzie dostępny dla obu tych funkcji na serwerze.

1

Upewnij się, aby użyć ścieżki względnej, czasami absolutnie ścieżka nie działają

OK:”../../myImage.png „

źle:” http://www.example.com/myImage.png "

+0

Twoje rozwiązanie pracował dla mnie, zastanawiam się dlaczego? Mam ten błąd podczas uruchamiania testu phpunit –

0

miałem ten błąd w moim sklepie Magento

Jeśli otworzysz tcpdf.php znajdziesz ten kod, $ plik był url kiedy należy jut. ścieżka do pliku:

// check if is a local file 
if ([email protected]_exists($file)) { 
     // try to encode spaces on filename 
     $tfile = str_replace(' ', '%20', $file); 

na szybki fix dodałem ten kod:

$file = str_replace("http://theurliwantgone/","",$tfile); 

i zadziałało! Mam nadzieję, że to pomaga większości z was!

2

Aby debugować ten problem można usunąć @ z @getimagesize ($ file) w tcpdf.php wokół linii 6850. Szukaj [Obrazek] Nie można uzyskać rozmiaru obrazka: i przewijać niektóre linie w górę. @ Ukrywa rzeczywisty komunikat o błędzie.

Jeśli jesteś w stanie dotrzeć do adresu URL obrazu z przeglądarki, może się zdarzyć, że twój system nie wskaże adresu URL żądanemu hostowi. Powiązana wiadomość to getimagesize(): php_network_getaddresses: getaddrinfo failed:. Oznacza to, że twoja lokalna konfiguracja php nie ma pojęcia, gdzie szukać adresu URL. W takim przypadku musisz zmienić plik/etc/hosts i wskazać lokalną konfigurację na adres URL adresu URL. Często jest to problem w ustawieniach localhost.

E.g. 127.0.0.1 yoururlhere.local

+0

Próbowałem go i otrzymałem wiele ostrzeżeń. ale masz rację, mogę uzyskać dostęp do adresu URL obrazu z przeglądarki. –

-3

Szukaj wokół linii 6877 w tcpdf.php

if ($imsize === FALSE) { 
     if (($w > 0) AND ($h > 0)) { 
      // get measures from specified data 
      $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k; 
      $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k; 
      $imsize = array($pw, $ph); 
     } else { 
      $this->Error('[Image] Unable to get the size of the image: '.$file); 
     } 
    } 

Przejdź do:

if ($imsize === TRUE) { 
     if (($w > 0) AND ($h > 0)) { 
      // get measures from specified data 
      $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k; 
      $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k; 
      $imsize = array($pw, $ph); 
     } else { 
      $this->Error('[Image] Unable to get the size of the image: '.$file); 
     } 
    } 
+0

Ten sam tekst w obu polach? – leiavoia