2010-01-27 23 views
13

Tôi có một trang web sử dụng SVG cho một điều tương tác với khách hàng. Tôi muốn cung cấp tùy chọn tải xuống bản PDF của đầu ra đã hoàn thành. Tôi có thể vượt qua đầu ra SVG cuối cùng quay trở lại máy chủ, nơi tôi muốn chuyển đổi sang PDF, sau đó trả lại cho khách hàng để tải xuống.SVG sang PDF trên máy chủ chia sẻ linux

Điều này sẽ cần phải làm việc trên một máy chủ Linux chia sẻ không đầu, nơi cài đặt hoặc biên dịch là một trong hai nỗi đau rất lớn, hoặc không thể. Trang web là PHP, vì vậy giải pháp lý tưởng sẽ là PHP hoặc sử dụng phần mềm được cài đặt dễ dàng trên máy chủ web được chia sẻ. Python, perl và ruby ​​có sẵn, cùng với những điều bình thường bạn có thể mong đợi trên một hộp linux. Các giải pháp liên quan đến cairo, kịch bản inkscape, hoặc cài đặt phức tạp hơn 'FTP nó lên' có lẽ là ra ngoài. Chi tiêu một lượng lớn tiền cũng ra ngoài, một cách tự nhiên. Vì đây là một máy chủ chia sẻ, bộ nhớ và/hoặc các giải pháp CPU đói cũng được ra, vì họ sẽ có xu hướng bị giết; điều này nhiều hơn hoặc ít hơn quy tắc ra Batik.

Điều gần nhất mà tôi đã có cho đến nay là this XSL transform mà tôi có thể lái xe từ PHP và sau đó nhúng postscript kết quả thông qua ps2pdf (đã được cài đặt). Vấn đề duy nhất với điều này là nó không hỗ trợ đường dẫn SVG - nếu nó đã làm, nó sẽ là hoàn hảo.

Có một loạt câu hỏi liên quan trên StackOverflow, tất cả những gì tôi đã đọc qua, nhưng tất cả đều cho rằng bạn có thể cài đặt nội dung, chi tiêu tiền hoặc cả hai.

Có ai có giải pháp off-the-shelf cho điều này hay tôi nên dành chút thời gian để cố gắng thêm đường dẫn hỗ trợ cho biến đổi XSL đó?

Cảm ơn, Dunc

Trả lời

16

Tôi tình cờ gặp TCPDF hôm nay, điều này hoàn toàn phù hợp với điều này, tôi đã biết điều đó vào thời điểm đó. Nó chỉ là một tập hợp các lớp PHP thuần túy, không phụ thuộc vào bên ngoài cho hầu hết mọi thứ.

Nó có thể xây dựng của PDF từ đầu và bạn có thể bao gồm khá nhiều bất cứ điều gì bạn muốn trong đó, bao gồm SVG (trong số nhiều, rất nhiều những thứ khác), như trong ví dụ sau:

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

dự án chính trang là ở đây:

http://www.tcpdf.org/

trang Sourceforge là ở đây:

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

+3

+1 để quay lại và cập nhật – hawbsl

2

có bạn nhìn vào imagemagick? Tôi nghi ngờ bạn cũng cần ghostscript để hoàn thành vòng lặp, điều này có thể gây khó khăn khi cài đặt và thực hiện sự cố.

+2

Đi qua ImageMagick - trong đó có sẵn - rasterizes (afaik), do đó bạn kết thúc với một PDF với một bitmap in Tôi muốn một vector có thể mở rộng dựa trên PDF, trong đó có lợi thế là vô hạn khả năng mở rộng, có thể in và nhỏ, kích thước tập tin khôn ngoan. –

+3

Có người khác đã chơi với ImageMagick và nó rasterize, tạo ra một pdf với một bitmap bên trong. Để tham khảo trong tương lai, nó rất dễ dàng để làm mặc dù: convert test.svg test.pdf hay như thế này nếu bạn muốn xác định độ phân giải đầu ra: convert -density 1200 test.svg test.pdf cho 1200dpi , ví dụ. Điều này có xu hướng tạo ra các tập tin pdf khá lớn mặc dù. –

2

Tôi khuyên bạn nên cung cấp princexml lần thử, chúng cung cấp various addons (bao gồm một cho PHP) và có thể xuất PDF từ SVG/HTML/XML.

+1

Vâng, tôi nghĩ ai đó sẽ gợi ý rằng - nhưng một giấy phép máy chủ cho nó là 3800 USD - waaay cho nhiều tiền cho việc này, tôi sợ. Cảm ơn cho đề nghị mặc dù :) –

3

Bạn có thể sử dụng Apache FOP 's miễn phí toolkit Batik SVG trong đó có một transcoder api chuyển đổi SVG sang PDF.

download link

Bạn sẽ cần phải viết một chút java. Có các ví dụ mã số here - lưu ý bạn sẽ cần đặt bộ chuyển mã thành org.apache.fop.svg.PDFTranscoder thay vì Java.

Bạn sẽ có thể thực hiện việc này mà không cần cài đặt bất kỳ thứ gì trên máy của mình - chỉ cần kéo các lọ lên đó và chạy tập lệnh. Tôi trích dẫn:

Tất cả các thư viện khác cần thiết bởi Batik được bao gồm trong bản phân phối. Kết quả là kho lưu trữ Batik khá lớn, nhưng sau khi bạn tải xuống, bạn sẽ không cần bất cứ thứ gì khác.

+0

lưu ý, tôi đã không được sử dụng trực tiếp bản thân mình, nhưng tôi đã thực hiện một loạt các công việc docbook sử dụng batik, và nó hoạt động thực sự tốt. –

+0

Cảm ơn bạn đã đề xuất - Tôi biết về Batik (xem câu hỏi) và muốn thử nhưng tôi chưa thể tải xmlgraphics.apache.org để tải trong một tuần hoặc lâu hơn, mặc dù http://ismysiteup.org/check/xmlgraphics.apache.org tuyên bố nó hoạt động; không chắc chuyện gì xảy ra với điều đó. –

0

tôi đã sử dụng TCPDF (http://www.tcpdf.org/) trong nhiều dự án và hoạt động trong hầu hết mọi trường hợp sử dụng.

Dưới đây là ví dụ về SVG: https://tcpdf.org/examples/example_058/

và sau đây là đoạn code mà có thể giúp bạn:

$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); 
Các vấn đề liên quan