Ошибка 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, но ничто из этого не помогло
ошибка изображения CakePHP 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);
}
}