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);