TCPDF выдает ошибки при передаче SVG с использованием данных URI для изображений

Я использую FabricJS на внешнем интерфейсе, чтобы создавать монограммы, а изображения, загруженные на холст, обрезаются в соответствии с дизайном. Fabric использует исходное изображение при генерации SVG, поэтому я обновляю источник изображения до uri данных и отрисовываю холст перед окончательным вызовом toSVG ()

Выше работает, нуждается в доработке, но SVG генерируется и выглядит хорошо.

Теперь, когда мы передаем данные SVG в TCPDF, TCPDF выдает ошибки и создает неполный PDF. Все, кроме встроенного изображения, нарисовано правильно. Часть изображения, однако, представляет собой просто белый квадрат.

Что вызывает сбой TCPDF при разборе образа data-uri?

Warning: Illegal string offset 'masked' in /home/xxx/includes/tcpdf/tcpdf.php on line 7145

Warning: Illegal string offset 'altimgs' in /home/xxx/includes/tcpdf/tcpdf.php on line 7151

Warning: Illegal string offset 'i' in /home/xxx/includes/tcpdf/tcpdf.php on line 20877

Warning: Illegal string offset 'i' in /home/xxx/includes/tcpdf/tcpdf.php on line 20890

Warning: Illegal string offset 'i' in /home/xxx/includes/tcpdf/tcpdf.php on line 7153

Warning: Illegal string offset 'i' in /home/xxx/includes/tcpdf/tcpdf.php on line 7188

Warning: Illegal string offset 'i' in /home/xxx/includes/tcpdf/tcpdf.php on line 7235

Ссылка на данные SVG: http://pastebin.com/SqjYT89Q

0

Решение

Я считаю, что эта проблема вызвана ошибкой в ​​FabricJS. Файл SVG, созданный вами с использованием FabricJS, имеет много экземпляров stroke-dasharray параметр, используемый в stroke атрибут path тэги, за исключением того, что он не включает спецификацию опций, что, согласно спецификациям SVG, неверно:

http://www.w3.org/TR/SVG/painting.html#StrokeProperties

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

style="stroke: none; stroke-width: 1; stroke-dasharray: ; stroke-linecap: butt;...

Но на самом деле должно выглядеть так:

style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt;...

Обратите внимание на добавление никто вариант после stroke-dasharray,

Чтобы проверить эту теорию, я выполнил простой поиск и замену предоставленного вами файла SVG, добавив никто и, как только я это сделал, я смог успешно преобразовать ваш SVG-файл в JPG с помощью Imagick (получил фиолетовый овал с URL-адресом и изображением красивой собаки. :-). Основываясь на этом результате, я вполне уверен, что ошибки TCPDF исчезнут, если эта проблема в файле SVG будет решена.

Надлежащее решение этой проблемы состоит в том, чтобы поднять проблему в проекте FabricJS на GitHub, и, если ваши навыки работы с JavaScript соответствуют этому, вы, вероятно, можете исправить и отправить запрос на извлечение.

Тем временем вы можете обойти эту проблему, запустив входящий SVG-файл через str_replace() функция, заменяющая все экземпляры stroke-dasharray: ; с stroke-dasharray: none; перед передачей данных SVG в TCPDF, и это должно решить вашу проблему.

1

Другие решения

Других решений пока нет …