Ошибка 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 ERROR: [Image] Невозможно получить изображение:

Ошибка изображения cakephp tcpdf [Изображение] Невозможно получить изображение

TCPDF ERROR: [Изображение] Не удалось получить изображение

Ответы

Ответ 1

Это может быть связано с невозможностью filesize() stat() с файлом 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 разрежена), поэтому вам может потребоваться немного поэкспериментировать, чтобы заставить его работать правильно.


Редактировать:

Это полностью рабочий пример (на моем ПК). Используйте это, чтобы проверить, можете ли вы успешно получить изображение и вывести 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();

?>

Ответ 2

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

Ответ 3

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

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

Например 127.0.0.1 yoururlhere.local

Ответ 4

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

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

неверно: " http://www.example.com/myImage.png "

Ответ 5

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

Если вы откроете tcpdf.php вы найдете этот код, $ file был 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);

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

Ответ 6

Как ни странно для меня (в 2019 году) я обнаружил, что мне пришлось убрать! строки 1924 года в include/tcpdf_static.php. По какой-то причине он только посмотрел бы на ini_get('allow_url_fopen') если он был ложным, но мои настройки сервера были верны - поэтому исправили код, и он работал нормально. Это также раньше работало, но внезапно прекратилось!

Ответ 7

Поиск по строке 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);
        }
    }