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

标签 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,它应该可以工作......好吧,是的,但它仍然无法工作。

  • 有人知道如何处理这个问题吗?
  • 也许是我还没有想到的不同方法?

最佳答案

您可以使用 inkscape 也来自命令行。然后它甚至不会启动 GUI。

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

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

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

Screenshot of out.pdf

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

更新

顺便说一句,我的 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

关于php - 在 PHP 中使用带有弯曲文本的 SVG 创建 PDF - 不显示任何文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563757/

相关文章:

php - PHPUnit 中是否有与 SimpleTest 的 "partial mocks"等效的内容?

php - 使用正则表达式获取方括号的内容,包括嵌套的内容

php - 如何在Laravel/Eloquent中使用字符串字段的一部分搜索记录?

macos - 如何在 OS X 的命令行上生成 PDF 中特定页面的缩略图?

python - 在django中获取xhtml2pdf数据作为变量

javascript - 拖动 svg 矩形

php - 将 MySQL 连接到 Android

javascript - 如何创建倾斜轴?

css - 如何在悬停时更改 svg 颜色

javascript - 使用 html-pdf 创建 PDF 文件在我的部署服务器中不起作用?