2014-11-21 3 views
6

Я использую TCPDF для создания динамически созданного PDF-файла. В моем файле pdf изображение создается на основе ввода пользователем, и я хочу добавить это изображение в свой файл pdf. Вот мой кодОшибка TCPDF: невозможно получить размер изображения

$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); 

Если я вставить "example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary & suit_type = & min_area = & max_area =" это на мой url это создать образ, как я хотел, но если поставить этот URL-адрес, он не работает. Это говорит Невозможно получить размер изображения

Но если я надену что-то вроде этого

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

Он может генерировать PDF с этим изображением успешно.

Как его решить?

Я посетил следующую StackOverflow ссылку, но ничего из этого не пришли к какой-либо помощи

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

ответ

10

Это может быть из-за filesize() не в stat() пульта дистанционного управления файл изображения через HTTP wrapper (так как обертка не поддерживает его).

Согласно TCPDF image() method documentation, вы можете передать данные изображения непосредственно, добавив его с помощью символа @. Таким образом, вы можете получить исходные данные изображения, а затем передать его в TCPDF так:

$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); 

Обратите внимание, что я не проверял это (и документация TCPDF редка), так что вы, возможно, придется немного поэкспериментировать, чтобы получить он работает правильно.


Edit:

Это полностью рабочий пример (на моем компьютере). Используйте это, чтобы проверить, можете ли вы успешно получить изображение и вывести PDF в свой браузер. Конечно, вам нужно установить известный допустимый путь для изображения!

<?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

Убедитесь, что сервер может использовать РНР file_get_contents или cURL, чтобы загрузить файл. «Невозможно получить размер изображения» - это первая ошибка в функции Image, которую TCPDF будет бросать, если файл недоступен для обеих этих функций на сервере.

1

Убедитесь, что используется относительный путь, несколько раз абсолютно пути не работают

OK:»../../myImage.PNG «

неправильно:» http://www.example.com/myImage.png "

+0

Ваше решение работал для меня, я задаюсь вопросом, почему? Я получил эту ошибку при запуске теста phpunit –

0

Я имел эту ошибку на моем Magento магазине

Если вы откроете tcpdf.php вы найдете этот код, $ файл был URL, когда он должен быть торчат. путь к файлу:

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

для быстрого исправления я добавил этот код:

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

и это сработало! Надеюсь, это поможет большинству из вас!

2

Для отладки этого вопроса вы можете удалить @ из @getimagesize ($ файла) в tcpdf.php вокруг линии 6850. Поиска по [Image] Невозможно получить размер изображения: и прокручивать несколько строк вверх. @ Скрывает фактическое сообщение об ошибке.

Если вы можете связаться с URL-адресом изображения из браузера, возможно, ваша система не указывает URL-адрес запрашиваемому хосту. Соответствующее сообщение: getimagesize(): php_network_getaddresses: getaddrinfo не удалось:. Это означает, что ваша локальная конфигурация php не имеет понятия, где искать URL. В этом случае вам нужно изменить файл/etc/hosts и указать локальную настройку на ip urls. Это часто является проблемой для локальных настроек.

E.g. 127.0.0.1 yoururlhere.local

+0

Я попробовал и получил много предупреждений. но вы правы, я могу получить доступ к URL-адресу изображения из браузера. –

-3

Поиск вокруг линии 6877 в 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); 
     } 
    } 

Переключаю:

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

Тот же текст в обеих коробках? – leiavoia

Смежные вопросы