МПДФ на всю страницу фон
Я потратил слишком много времени на это и я не могу придумать хорошее решение 21 века.
просто мне нужно создать визитную карточку в формате PDF с фоновым изображением, но MPDF не очень полезен.
по умолчанию у меня было:
@page{
sheet-size: 90mm 55mm;
margin: 0;
}
пробовал:
- использовать @page{ background-size: 100%;}
doesn't work
- использовать @page{ background-size: cover;}
doesn't work
- изменение размера изображения-даже если я установил правильный размер в " мм " он будет меньше или больше, даже если я установлю фон-изображение-разрешение к тому же значению, что и изображение.
- место абсолютное расположенный
div
С фоновое изображение - то же самое, но с
img
теги, используя
3 ответов
mPDF имеет пользовательское свойство css для фоновых изображений: background-image-resize с пользовательскими значениями от 0-6:
- 0 - без изменения размера (по умолчанию)
- 1-Shrink-to-fit w (сохранить соотношение сторон)
- 2-Shrink-to-fit h (сохранить соотношение сторон)
- 3-Shrink-to-fit w and / or h (сохранить соотношение сторон)
- 4-Resize-to-fit w (сохранить соотношение сторон)
- 5-Resize-to-fit h (сохранить соотношение сторон)
- 6-изменение размера по размеру w и h
Так что вам, вероятно, нужно: тело {background-image: url (something.png); фон-изображение-изменение размера: 6}
в случае, если кому-то еще нужна фоновая обложка в mPDF и не помогает изменение размера фонового изображения, которое ломается, как только оно обернуто плавающим элементом. Плавающие элементы часто необходимы в mPdf из-за отсутствия соответствия css. Вот более надежное решение для обведенного изображения с имитацией BG-обложки.
ориентация вам изображения
function getImageOrientation(string $imgPath){
list($imgWidth,$imgHeight) = getimagesize($imgPath);
$aspectRatio = $imgWidth / $imgHeight;
if($aspectRatio >= 1){
return array('landscape',$imgWidth,$imgHeight,$aspectRatio);
}else{
return array('portrait',$imgWidth,$imgHeight,$aspectRatio);
}
}
установить собственные свойства для имитации фон-обложка
public static function returnCircledImage($imgPath, int $size){
list($orientation,$imgWidth,$imgHeight, $aspectRatio) = getImageOrientation($imgPath);
if($orientation == 'landscape'){
$backgroundSize = 'auto 100%'; //fit height, keep aspect ratio
$calculatedWidth = floor($size * $aspectRatio);
$calculatedHeight = $size;
//position center manually
$dx = -floor(($calculatedWidth - $calculatedHeight) / 2);
$dy = 0;
}else{
$backgroundSize = '100% auto'; //fit width, keep aspect ratio
$calculatedWidth = $size;
$calculatedHeight = floor($size * $aspectRatio);
//position center manually
$dx = 0;
$dy = -floor(($calculatedHeight - $calculatedWidth) / 2);
}
return sprintf('
<div class="%s" style="background-size: %s; background-position:%spx %spx; overflow:hidden; border-radius:100px; width:%spx; height:%spx; background-image: url(%s)"></div>
',
$backgroundSize,
$dx,
$dy,
$size,
$size,
$imgPath
);
}
рабочий пример с background-image-resolution
свойства :
<body style="background-image: url('/absolute/path/to/image.jpg');
background-position: top left;
background-repeat: no-repeat;
background-image-resize: 4;
background-image-resolution: from-image;">
он отлично работает с изображением JPEG 300DPI на счетах-фактурах.
если вы используете и
style="..."
тег иbody{...}
стиль в CSS, mpdf будет игнорироватьstyle="..."
тег и его содержимое, поэтому изображение не появится!