DomPDF: изображение не читаемое или пустое
По какой-то причине DomPDF не будет отображать изображение, содержащееся в анализируемом html:
![PDF Image missing]()
Однако изображение отображается на странице, когда оно возвращается как html:
![HTML Image exists]()
Я рассмотрел эти проблемы и удостоверился, что для параметра DOMPDF_ENABLE_REMOTE установлено значение true и Verified files:
dompdf изображение не настоящее изображение не читаемое или пустое
Ошибка изображения в DOMPDF для ZF2
Есть ли другие вещи, которые я должен проверять?
Ответы
Ответ 1
После этого мне нравились обаяние, по крайней мере, локально и даже с
def("DOMPDF_ENABLE_REMOTE", false);
Решение состоит в том, чтобы изменить SRC изображения на абсолютный путь на сервере, например:
<img src="/var/www/domain/images/myimage.jpg" />
Все следующие работали для меня:
<img src="<?php echo $_SERVER["DOCUMENT_ROOT"].'/placeholder.jpg';?>"/>
<img src="<?php echo $_SERVER["DOCUMENT_ROOT"].'\placeholder.jpg';?>"/>
<img src="<?php echo $_SERVER["DOCUMENT_ROOT"].'./placeholder.jpg';?>"/>
$_ SERVER [ "DOCUMENT_ROOT" ] - C:/wamp/www/ZendSkeletonApplication/public
Благодаря этому: потерян в коде
Ответ 2
Ok
У меня была такая же проблема с изображением, используя:
<img id="logo" src="/images/flags/fr.png" width="50" alt="Logo">
Но если я добавлю. перед/изображениями, не меняя ничего в dompdf_config.custom.inc, он работает
<img id="logo" src="./images/flags/fr.png" width="50" alt="Logo">
Надеюсь, что это поможет
Ответ 3
Поскольку появился еще один ответ, который предполагает включение удаленного параметра в module.config.php
, и я еще не могу добавить комментарии, я подумал, что лучше всего ответить, что этот файл не существует в более новых версиях DomPDF.
Если вам нужно включить удаленные сохраненные образы в более новую версию, вам необходимо передать его в качестве опции для конструктора:
$dompdf = new Dompdf(array('enable_remote' => true));
Это зафиксировало проблему.
Ответ 4
Теперь (май 2018 г.) правильный путь:
$options = new Options();
$options->set('isRemoteEnabled',true);
$dompdf = new Dompdf( $options );
Ответ 5
В пути:
поставщика/Дино/DOMPDF-модуль/конфигурации/module.config.php
изменить настройки
enable_remote '= > false,
то верно.
Ответ 6
Ни одно из решений здесь не работало. Вместо этого я просто base64 закодировал изображение, а затем он сработал. Вы можете использовать этот инструмент.
Ответ 7
Я решаю эту проблему, используя внешний полный путь CSS. Это работало на моем Linux-сервере ubuntu:
<link href="{{ public_path('css/style.css') }}" />
<img src="{{ public_path('images/image.jpg') }}" />
и работать с изображением.
Ответ 8
Для нашего варианта использования нам пришлось преобразовать все изображения на странице в base64, поскольку PDF файл должен использоваться в автономном режиме. Наш код находится внутри класса контроллера, но вы можете изменить его в соответствии со своими потребностями.
Вот код:
/**
* Convert images to Base64 so it included in the PDF.
*
* @param $html Full html render of the page.
*/
public function convertReportImagesToURI($html): string
{
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
$tags = $doc->getElementsByTagName('img');
$imgArr = array();
// Iterate over all image tags.
foreach ($tags as $tag) {
// Get the src attribute.
$imgSrc = $tag->getAttribute('src');
// Convert to base64.
$base64src = self::getImageDataURI($imgSrc);
$tag->setAttribute('src', $base64src);
}
return $doc->saveHTML();
}
/**
* This does the actual encoding.
*/
public static function getImageDataURI($image, $mime = ''): string
{
// Director::absoluteURL('/') gets the base url of the site.
// We had to remove the leading slash of the image hence the use of substr.
// If your images have absolute urls you will need to modify this.
$imageLocation = Director::absoluteURL('/') . substr($image, 1);
// Get the image location. remove leading slash on image url.
return 'data:' . self::get_image_mime_type($imageLocation) . ';base64,' . base64_encode(file_get_contents($imageLocation));
}
/**
* https://stackoverflow.com/a/45054843
* @param $image_path
* @return string
*/
public static function get_image_mime_type($image_path): string
{
$mimes = array(
IMAGETYPE_GIF => "image/gif",
IMAGETYPE_JPEG => "image/jpg",
IMAGETYPE_PNG => "image/png",
IMAGETYPE_SWF => "image/swf",
IMAGETYPE_PSD => "image/psd",
IMAGETYPE_BMP => "image/bmp",
IMAGETYPE_TIFF_II => "image/tiff",
IMAGETYPE_TIFF_MM => "image/tiff",
IMAGETYPE_JPC => "image/jpc",
IMAGETYPE_JP2 => "image/jp2",
IMAGETYPE_JPX => "image/jpx",
IMAGETYPE_JB2 => "image/jb2",
IMAGETYPE_SWC => "image/swc",
IMAGETYPE_IFF => "image/iff",
IMAGETYPE_WBMP => "image/wbmp",
IMAGETYPE_XBM => "image/xbm",
IMAGETYPE_ICO => "image/ico");
if (($image_type = exif_imagetype($image_path))
&& (array_key_exists($image_type, $mimes))) {
return $mimes[$image_type];
} else {
return '';
}
}