Ошибка 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);
}
}