Создание PDF с SVG с изогнутым текстом без текста не отображается

Сейчас я работаю над проектом, который требует от меня рендеринга PDF, включая SVG с изогнутым текстом, написанным на нем.

Текст должен быть создан таким образом, поскольку он должен быть доступен на нескольких языках и иметь переменную в нем.

К настоящему времени я получил PDF, который будет отображаться так, как я хочу, за исключением изогнутого текста, который просто игнорируется.

Это SVG, которую я пытаюсь сделать:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" height="1024px" width="1280px" id="mainSVG">
<defs>
<path d="m250,250 a10,10 0 0 0 350,250" id="curvedTextPath"></path>
<path d="m250,250 a10,10 0 0 1 350,250" id="curvedTextPath2"></path>
</defs>
<circle style="fill: blue;" cx="425px" cy="375px" r="250" id="mainCircle"></circle>
<text>
<textPath startOffset="55%" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#curvedTextPath">Some test text that is longer</textPath>
<textPath startOffset="22.5%" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#curvedTextPath2">Smaller text here</textPath>
</text>
</svg>

Я попытался преобразовать SVG с помощью Imagick, который дает мне только кружок без текста:

    <?php
$svg = file_get_contents("/path/to/test.svg");
$image = new Imagick();
$image->readImageBlob($svg);
$image->setImageFormat("png");
$image->writeImage("/path/to/lobster.png");
?>

То же самое касается команды ImageMagick «convert» и функции imageSVG в TCPDF:

require_once('./tcpdf/tcpdf_import.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->setCreator(PDF_CREATOR);
$pdf->setAuthor('Test');
$pdf->setTitle('Curvetest');
$pdf->setSubject('Testing of the Curve');
$pdf->addPage();
$pdf->imageSVG($file = './test.svg', $x = 15, $y = 30, $w = '', $h = '');
$filepath = '/path/to/test.pdf';
$pdf->Output($filepath, 'F');

У меня сейчас нет идей, я читал, что ImageMagick игнорирует textPath при конвертации, но если libRSVG установлен, он должен работать … ну, это так, но он по-прежнему не работает.

  • У кого-нибудь есть идеи, как с этим бороться?
  • Может быть, другой подход, о котором я еще не думал?

2

Решение

Ты можешь использовать inkscape также из командной строки. Тогда он даже не запустит графический интерфейс.

Следующая команда преобразует ваш SVG в PDF:

inkscape          \
--without-gui    \
--file=input.svg \
--export-pdf out.pdf

Снимок экрана ниже взят из цитируемого источника SVG (в OP) после преобразования в PDF:

Снимок экрана out.pdf

Чтобы увидеть больше возможных полезных параметров для команды inkscape, см. inkscape --help,

Обновить

КСТАТИ, мой версия ImageMagick (версия MacPorts на OSX Mavericks) без проблем конвертировала SVG в PDF:

$ convert -version

Version: ImageMagick 6.9.0-0 Q16 x86_64 2014-12-06 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png ps rsvg tiff webp wmf x xml zlibconvert input.svg out2.pdf

Вот скриншот полученного PDF:

Снимок экрана out2.pdf

1

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

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

По вопросам рекламы [email protected]