Yii2: Как показать штрих-код?

У меня есть функция печати в PDF в моем контроллере. Он получает HTML-код штрих-кода и отправляет его в файл _print-tags.

Мой файл контроллера:

public function actionPrintTags($barcode)
{
    Yii::$app->response->format = 'pdf';

    return $this->renderPartial('_print-tags', [
        'bar' => $barcode,
    ]);
}

Мой файл _print-tags:

<body>
    <?= $bar . '<br/>' ?>
</body>

Но показывает:

Неверный штрих-код

Если я покажу это с моей точки зрения, это выглядит идеально:

Идеальный штрих-код.

Я использую https://www.yiiframework.com/extension/yii2-barcode-generator-8-types.

Обновление: $barcode содержит HTML-код, создающий штрих-код:

<div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 4px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 2px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 3px"></div><div style="float: left; font-size: 0px; width:0; border-left: 2px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 3px"></div><div style="float: left; font-size: 0px; width:0; border-left: 2px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 2px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 2px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 4px solid #000000; height: 50px;"></div><div style="float: left; font-size: 0px; background-color: #FFFFFF; height: 50px; width: 1px"></div><div style="float: left; font-size: 0px; width:0; border-left: 1px solid #000000; height: 50px;"></div><div style="clear:both; width: 100%; background-color: #FFFFFF; color: #000000; text-align: center; font-size: 10px; margin-top: 5px;">A</div>

person Roby Sottini    schedule 10.04.2018    source источник


Ответы (1)


Вероятно, это ограничение mPDF. mPDF не имеет полной поддержки функций HTML и CSS, некоторые вещи могут отображаться иначе, чем в браузерах.

Свойство CSS float частично поддерживается в mPDF, что позволяет размещать блочные элементы (p, div и т. д.) рядом друг с другом. Их также можно использовать для создания «столбцов», охватывающих более одной страницы.

Ограничения:

  • Поплавок работает правильно, только если для поплавка установлена ​​ширина
  • Если ширина не задана, устанавливается максимально доступная ширина (полная ширина или меньше, если плавающие элементы уже установлены).
  • У блочного элемента рядом с плавающей запятой отрегулированы отступы, чтобы содержимое соответствовало оставшейся ширине.
  • Текст рядом с поплавком должен правильно переноситься, но фоны и границы будут перекрываться и/или лежать под поплавками в беспорядке.
  • Не работает, если используются столбцы.
  • Вы не можете изменить поля/ориентацию страницы и т. д. в середине использования поплавков.
  • Плавающее поддерживается только для блочных элементов (т.е. не для SPAN и т.д.)

https://mpdf.github.io/what-else-can-i-do/floating-blocks.html


Вы можете попробовать поиграть с этим HTML и использовать некоторые заменители (например, display: inline-block вместо float:left) или установить некоторую ширину для родительского контейнера. Но, вероятно, будет проще переключиться на библиотеку, которая способна отображать штрих-код в виде изображения (picqer/php -barcode-generator например) - простой PNG должен быть менее проблематичным для генераторов PDF.

person rob006    schedule 11.04.2018