【问题标题】:SVG to PDF on a shared linux server共享 Linux 服务器上的 SVG 到 PDF
【发布时间】:2011-01-09 18:44:20
【问题描述】:

我有一个将 SVG 用于交互式客户端 thingamabob 的网站。我想提供下载完成输出的 PDF 的选项。我可以将最终的 SVG 输出传回服务器,在那里我要转换为 PDF,然后将其返回给客户端进行下载。

这需要在无头共享 linux 服务器上工作,安装或编译要么是巨大的痛苦,要么是不可能的。该网站是 PHP,因此理想的解决方案是 PHP,或者使用易于安装在共享网络服务器上的软件。可以使用 Python、perl 和 ruby​​,以及您在 linux 机器上可能期望的通常的东西。涉及 cairo、脚本 inkscape 或比“FTP it up”更复杂的安装的解决方案可能已经过时了。花钱大手大脚的,自然也出来了。由于这是一个共享服务器,内存和/或 CPU 饥渴的解决方案也被淘汰了,因为它们往往会被杀死;这或多或少排除了蜡染。

到目前为止,我最接近的是this XSL transform,我可以从 PHP 驱动它,然后通过 ps2pdf(已经安装)喷射生成的 postscript。唯一的问题是它不支持 SVG 路径 - 如果支持,那就完美了。

StackOverflow 上有一堆或相关的问题,我已经阅读了所有这些问题,但它们都假设您可以安装东西,花钱,或两者兼而有之。

是否有人对此有现成的解决方案,或者我应该花一些停机时间尝试为 XSL 转换添加路径支持?

谢谢, 邓克

【问题讨论】:

    标签: linux pdf svg pdf-generation image-transcoding


    【解决方案1】:

    我今天偶然发现了 TCPDF,如果我当时知道的话,它本来是完美的。它只是纯 PHP 类的集合,大多数东西没有外部依赖。

    它可以从头开始构建 PDF,您可以在其中包含几乎任何您想要的东西,包括 SVG(以及许多其他东西),如以下示例所示:

    http://www.tcpdf.org/examples.php

    主项目页面在这里:

    http://www.tcpdf.org/

    Sourceforge 页面在这里:

    http://sourceforge.net/projects/tcpdf/

    【讨论】:

      【解决方案2】:

      您可以使用Apache FOP免费 Batik SVG 工具包,它有一个transcoder api 将 SVG 转换为 PDF。

      download link

      您将需要编写一点点 Java。有代码示例 here - 请注意,您需要将转码器设置为 org.apache.fop.svg.PDFTranscoder 而不是 Java。

      您应该无需在您的机器上安装任何东西就可以做到这一点——只需将 jar 拖到那里并运行脚本即可。我引用:

      Batik 所需的所有其他库都包含在发行版中。因此,Batik 存档非常大,但下载后,您将不再需要任何其他内容。

      【讨论】:

      • 注意,我自己没有直接用过这个,但是我做了一堆使用蜡染的docbook工作,效果很好。
      • 感谢您的建议 - 我知道 Batik(请参阅问题)并想尝试一下,但我无法让 xmlgraphics.apache.org 加载一周或所以现在,虽然ismysiteup.org/check/xmlgraphics.apache.org 声称它正在工作;不知道这是怎么回事。
      【解决方案3】:

      你看过imagemagick吗?我怀疑你还需要ghostscript 来完成循环,这可能会导致安装困难和性能问题。

      【讨论】:

      • 通过 ImageMagick - 这是可用的 - 光栅化(afaik),所以你最终得到一个带有位图的 PDF。我想要一个基于可扩展矢量的 PDF,它具有无限可扩展的优点,可打印且很小,文件大小明智。
      • 让另一个人玩过 ImageMagick,它会光栅化,创建一个包含位图的 pdf。为了将来参考,它很容易做到:转换 test.svg test.pdf 或者如果你想指定输出分辨率,可以这样:例如 convert -density 1200 test.svg test.pdf for 1200dpi。不过,这往往会创建相当大的 pdf 文件。
      【解决方案4】:

      我建议尝试princexml,他们提供various addons(包括一个用于PHP)并且可以从SVG/HTML/XML输出PDF。

      【讨论】:

      • 是的,我以为有人会建议 - 但它的服务器许可证是 3800 美元 - 恐怕要花很多钱。不过感谢您的建议:)
      【解决方案5】:

      我在许多项目中都使用过 TCPDF (http://www.tcpdf.org/),它几乎适用于所有用例。

      这里是 SVG 的例子:https://tcpdf.org/examples/example_058/

      以下是可以帮助您的代码:

      $pdf->ImageSVG($file='images/testsvg.svg', $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false);
      
      $pdf->ImageSVG($file='images/tux.svg', $x=30, $y=100, $w='', $h=100, $link='', $align='', $palign='', $border=0, $fitonpage=false);
      

      【讨论】:

        猜你喜欢
        • 2014-03-22
        • 2012-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-07
        • 2012-04-15
        • 2011-09-27
        相关资源
        最近更新 更多