2010-01-27 58 views
13

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

这将需要在无头共享Linux服务器上工作,安装或编译要么是巨大的痛苦,要么是不可能的。该网站是PHP,所以理想的解决方案是PHP,或者使用易于安装在共享网络服务器上的软件。 Python,perl和ruby都是可用的,以及你在Linux机器上可能会遇到的常见问题。涉及cairo,scripting inkscape或安装比'FTP'更复杂的解决方案可能已经不存在了。花费大量资金也是自然而然的。由于这是一个共享服务器,内存和/或CPU饥饿的解决方案也不存在,因为它们往往会被杀死;这或多或少排除蜡染。

到目前为止,我所得到的最接近的是this XSL transform,我可以从PHP驱动,然后通过ps2pdf(已安装)喷出结果后记。唯一的问题是它不支持SVG路径 - 如果它支持的话,那将是完美的。

在StackOverflow上有一堆或相关的问题,我已经读过所有这些问题,但他们都假设你可以安装东西,花钱或两者都有。

有没有人有现成的解决方案,或者我应该花一些停机时间试图添加路径支持到XSL转换?

感谢, Dunc

回答

16

我偶然发现了今天的TCPDF,这对我来说是完美的,我当时知道它。它只是一个纯PHP类的集合,对大多数事物来说没有外部依赖。

它可以从头开始建立PDF文件,您可以包括你想有相当多的东西,其中包括SVG(还有很多很多其他的东西),如以下示例所示:

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

主要项目页面是在这里:

http://www.tcpdf.org/

Sourceforge的页面是在这里:

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

+3

+1用于回来和更新 – hawbsl 2010-12-06 10:57:49

2

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

+2

通过ImageMagick的走出去 - 这是用 - 光栅化(据我所知),所以你最终一个带有位图的PDF。我想要一个基于可扩展矢量的PDF,它具有可无限扩展,可打印和小型文件大小明智的优点。 – 2010-01-27 01:39:28

+3

有另一个与ImageMagick玩,它做光栅化,创建一个PDF位图内。对于未来的参考,很容易做虽然: 转换test.svg检验.pdf 或类似这样的,如果你想指定输出分辨率: 转换-density 1200 test.svg检验.pdf 为1200dpi的, 例如。这往往会创建相当大的PDF文件。 – 2010-01-28 12:52:54

2

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

+1

是的,我认为有人会建议 - 但它的服务器许可证是3800美元 - 恐怕我会花很多钱。感谢您的建议,虽然:) – 2010-01-28 12:46:22

3

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

download link

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

你应该可以在没有在你的机器上安装任何东西的情况下做到这一点 - 只需拖动那里的瓶子并运行一个脚本。我引述:

蜡染所需的所有其他库都包含在发行版中。因此,蜡染档案是相当大的,但下载后,你不会需要任何其他东西。

+0

注意,我没有直接使用这个自己,但我做了一堆使用蜡染的docbook工作,它的工作非常好。 – 2010-01-28 14:27:31

+0

感谢您的建议 - 我知道Batik(请参阅问题),并且想尝试它,但我一直无法使xmlgraphics.apache.org加载一个星期左右,尽管http:/ /ismysiteup.org/check/xmlgraphics.apache.org声称它正在工作;不知道这是怎么回事。 – 2010-01-30 23:22:10

0

我在很多项目中都使用过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);