PDF在PHP中使用带有弯曲文本的SVG创建 - 不显示任何文本

时间:2015-04-10 14:15:26

标签: php pdf svg imagemagick imagemagick-convert

我现在正在开展一个项目,这需要我渲染一个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>

我尝试用Imagick转换SVG,这只给了我没有文字的圆圈:

    <?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”和TCPDF的“imageSVG”功能相同:

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,它应该可以工作......好吧,它确实如此,但它仍然不起作用。

  • 有没有人知道如何处理这件事?
  • 也许我没想到的另一种方法呢?

1 个答案:

答案 0 :(得分:1)

您也可以从命令行使用 inkscape 。它甚至不会启动GUI。

以下命令会将您的SVG转换为PDF:

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

下面的屏幕截图来自转换为PDF后引用的SVG源(在OP中):

Screenshot of out.pdf

要查看更多可能有用的inkscape命令参数,请参阅inkscape --help

更新

BTW, 我的 版本的ImageMagick(OSX Mavericks上的MacPorts版本)将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 zlib


convert input.svg out2.pdf

以下是PDF的截图:

Screenshot of out2.pdf