TCPDF игнорирует встроенный font-weight и font-style в $ pdf-> ImageSVG () при наличии файла с одним шрифтом - PullRequest
0 голосов
/ 16 октября 2018

У меня есть следующий svg:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="450" viewBox="0 0 600 450" xml:space="preserve">
  <g transform="translate(300 77)">
    <text xml:space="preserve" font-family="Slabo-Regular" font-size="40" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;"><tspan x="-44.44" y="12.57">Slabo</tspan></text>
  </g>
  <g transform="translate(300 230)">
    <text xml:space="preserve" font-family="Slabo-Regular" font-size="40" font-style="normal" font-weight="bold" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;"><tspan x="-44.44" y="12.57">Slabo</tspan></text>
  </g>
  <g transform="translate(300 389)">
    <text xml:space="preserve" font-family="Slabo-Regular" font-size="40" font-style="italic" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;"><tspan x="-44.44" y="12.57">Slabo</tspan></text>
  </g>
</svg>

У которого 1-я строка написана обычным "Slabo", 2-я строка имеет жирный шрифт "bold", а 3-я строка имеет font-стиль "курсив".

Однако, когда я преобразовываю этот svg в pdf, используя метод TCPDF с именем ImageSVG (), я получаю все строки, написанные обычным "Slabo".Это тестовый пример для шрифта с одним файлом (я знаю, как это сделать, если у меня были разные файлы для каждого варианта шрифта).

Похоже, что TCPDF игнорирует встроенный font-weight и font-style.

Это ожидаемое поведение или я сделал что-то не так?

1 Ответ

0 голосов
/ 03 ноября 2018

Насколько я знаю, TCPDF не будет приближаться к полужирному шрифту или стилю курсива.То есть он не будет пытаться приблизиться к стилю / весу шрифта, которого он не имеет на лету, как ваш браузер.

Если вы не хотите изменять SVG или растеризовать ихс ImageMagick у вас есть два варианта, которые мне известны:

1) Предоставить другие шрифты в качестве заливок для стилей Slabo, у которых у вас нет

Этот параметрнаверное проще всего.Поскольку у Slabo есть только обычный вес / стиль, вы можете выбрать прилично аналогичные автономные шрифты, а затем переименовать их файлы, чтобы они соответствовали правилам именования TCPDF для других стилей Slabo.

$slabo = TCPDF_FONTS::addTTFfont(realpath('./slabo/Slabo-Regular.ttf'), 'TrueTypeUnicode', '', 32);
//Regular
$slaboi = TCPDF_FONTS::addTTFfont(realpath('Slabo-Italic.ttf'), 'TrueTypeUnicode', '', 32); 
//Italic
$slabob = TCPDF_FONTS::addTTFfont(realpath('Slabo-bold.ttf'), 'TrueTypeUnicode', '', 32); 
//Bold
$slabobi = TCPDF_FONTS::addTTFfont(realpath('slabobi.ttf'), 'TrueTypeUnicode', '', 32); 
//Bold and Italic (file could have also been named something like Slabo-Bold-Italic.ttf)

TCPDF будетзатем найдите эти другие шрифты, когда анализатор SVG обрабатывает текстовые элементы.( Для примера, выделенного жирным шрифтом: Внутренне Slabo-Regular будет изменен на slabo, а затем, поскольку вы хотите выделить жирным шрифтом, он будет искать slabob, который существует, и затем этот шрифт будет использоваться.)

Ниже приведен пример со сменными шрифтами.(Тщательно не выбрано.)

Slabo replacement example

2) Создание приблизительных полужирных / курсивных стилей.

Вы можетесоздайте свои собственные стили Slabo.Например, с помощью такого инструмента, как FontForge

http://designwithfontforge.com/en-US/Bold_and_Other_Weights.html

Создание жирной версии шрифта можно быстро аппроксимировать, запустив фильтр с именем Изменить вес(который вы найдете в меню Элемент> Стили), чтобы добавить вес своим глифам.

...