2012-01-13 24 views
5

Tôi đã nhìn thấy rất nhiều người chiến đấu với vấn đề này, nhưng tôi không thể tìm thấy một giải pháp thích hợp, cũng không phải là một giải pháp phù hợp với nhu cầu của tôi.Có cách nào để chuyển đổi kết quả giấy Raphael sang PNG/SVG trong bất kỳ trình duyệt nào (kể cả các trình duyệt IE cũ hơn) không?

Tôi đang thực hiện một số biểu đồ với Raphael và về cơ bản tôi cần lấy chúng dưới dạng PNG (để xuất hoặc sử dụng sau trong PDF và một số nội dung khác). Đối với Firefox, Chrome, IE 9 và bất kỳ trình duyệt nào khác có hỗ trợ SVG thì thật dễ dàng. Thực tế có hai cách để đạt được nó: sử dụng canvg để hiển thị SVG thành phần tử canvas và sau đó lấy dữ liệu hình ảnh; hoặc gửi SVG tới máy chủ (C#) và sử dụng thư viện để rasterize nó.

Vấn đề là, tất nhiên, IE 8 và 7. Trong các trình duyệt này, Raphael xuất ra VML và không có cách nào rõ ràng để nhận nguồn SVG. Tôi không thể tìm thấy bất kỳ Rasterizer VML nào, vì vậy nó cho phép tôi một giải pháp duy nhất: để dịch VML sang SVG, hoặc để vẽ lại giấy trong SVG.

Tôi đã kiểm tra thư viện vectorconvert bằng PHP, thực sự sử dụng phép biến đổi XSLT để dịch VML sang SVG, nhưng tôi không thể làm việc đó (tôi đã thử một số công cụ để kiểm tra XSL nhưng dường như không hoạt động).

Tôi đã cố gắng buộc Raphael xuất SVG thành một div ẩn, bằng cách thay đổi thuộc tính của nó .type, .svg.vml đúng cách, nhưng điều đó cũng không hoạt động.

Tôi nghĩ rằng có thể có cách để viết cây SVG thành một DIV ẩn trong khi trong IE; mặc dù thực tế nó sẽ không được hiển thị bởi trình duyệt, văn bản sẽ ở đó.

Có ai biết cách để đạt được điều đó không? Cảm ơn!

+0

Sự cố đang cố gắng hỗ trợ các trình duyệt cũ đó, hãy nói với những người đó một cách thân thiện: "Trình duyệt của bạn đã lỗi thời, hãy cập nhật nó để sử dụng trang này. Nhấp vào đây để tải xuống Internet Explorer 9" –

+0

Tôi không chắc chắn làm thế nào nó phù hợp với một giải pháp, nhưng một cái gì đó như thế này giúp đỡ ?: https://github.com/jspies/raphael.serialize Nó ít nhất có thể cho phép bạn để có được một cái nhìn nhất quán về những gì trên giấy, và làm cho hình ảnh ở nơi khác . – oli

+0

Ngoài ra, hãy xem: http://blog.davidpadbury.com/2010/10/03/using-nodejs-to-render-js-charts-on-server/ một sự kết hợp của cả hai có thể đạt được điều này. – oli

Trả lời

1

Để hiển thị SVG bạn cũng có thể sử dụng thư viện CanVG.
Đó là SVG trình phân tích cú pháp và trình kết xuất với canvas kết quả đầu ra.
Tiếp theo, bạn chỉ cần xuất dữ liệu pixel từ canvas đến PNG.

Để giải quyết giới hạn IE, bạn có thể sử dụng Chrome Frame.

Các vấn đề liên quan