Ошибка TCPDF:невозможно получить размер изображения

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

 $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 работает на localhost, но не на моем сервере, давая ошибку TCPDF ошибка: [Image] невозможно получить изображение:

ошибка изображения CakePHP tcpdf [изображение] не удается получить изображение

TCPDF ошибка: [изображение] не удается получить изображение

6 ответов


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

по словам TCPDF image() метод документация вы можете передать данные изображения непосредственно, добавив его с помощью @ символ. Таким образом, вы можете получить необработанные данные изображения, а затем передать их 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();

?>

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


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

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

Е. Г. 127.0.0.1 yoururlhere.местные


у меня была эта ошибка в моем магазине Magento.

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

// check if is a local file
if (!@file_exists($file)) {
        // try to encode spaces on filename
        $tfile = str_replace(' ', '%20', $file);

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

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

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


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

ok:"../../myImage.png"

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


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