Полностраничный фон MPDF

Я потратил слишком много времени на это, и я не могу найти хорошее решение 21 века.

Просто мне нужно создать визитную карточку в формате PDF с фоновым изображением, но MPDF не очень помогает.

По умолчанию у меня было:

@page{
    sheet-size: 90mm 55mm;
    margin: 0;
}

Я попытался:

  • use @page {background-size: 100%; } doesn't work
  • use @page {background-size: cover; } doesn't work
  • измените размер изображения - даже если я установил правильный размер в 'мм', он будет меньше или больше, даже если я установил background-image-resolution на то же значение, что и изображение.
  • место абсолютное позиционированное div с фоновым изображением
  • но с тегами img, используя атрибут src.

При последнем варианте у меня действительно странная вещь. Он показал изображение целиком, но в маленьком прямоугольнике на страницах, но даже не на высоте.

Есть ли у кого-нибудь идея, как просто использовать изображение в качестве фона страницы?

Ответ 1

mPDF имеет собственное свойство css для фоновых изображений: background-image-resize с пользовательскими значениями от 0 до 6:

  • 0 - Без изменения размера (по умолчанию)
  • 1 - Сжатие до упора w (сохранить пропорции)
  • 2 - Усадка в соответствии с h (сохранить пропорции)
  • 3 - Термоусадочная пленка w и/или h (сохранить пропорции)
  • 4 - Изменение размера к размеру w (сохранить пропорции)
  • 5 - Изменение размера по размеру h (сохранить пропорции)
  • 6 - Изменение размера и соответствия w и h

Итак, вам, вероятно, понадобится: body {background-image: url (something.png); фоновое изображение изменение размера: 6}

Взято из документов mPDF

Ответ 2

В случае, если кому-то еще нужна фоновая обложка в mPDF и ей не помогает изменение размера фона, которое прерывается, как только оно завершается плавающим элементом. Платные элементы часто необходимы в mPdf из-за отсутствия соблюдения css. Вот более надежное решение для обведенного изображения с использованием bg-cover.

Получить ориентацию изображения

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
    );
}

Ответ 3

Рабочий пример с свойством 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;">

Он отлично работает с изображением 300DPI JPEG на счетах.

если вы используете как тег style="...", так и стиль body{...} в CSS, mpdf будет игнорировать тег style="..." и его содержимое, поэтому изображение не появится!