2017-11-24 68 views
7

Tôi đã tạo một canvas bằng cách sử dụng js vải, nơi người dùng có thể tạo danh thiếp đó. Bây giờ tôi đang đấu tranh để tạo ra hình ảnh có thể mở rộng/có thể in được (SVG & PNG).Cách tạo ảnh SVG và PNG ở phía máy chủ (PHP) bằng cách sử dụng dữ liệu toSVG của vải js

Tôi đang thử một số cách để tạo hình ảnh SVG và PNG ở phía máy chủ bằng cách sử dụng dữ liệu toSVG của vải jS. Vì vậy, sau đó người dùng có thể sử dụng SVG đó để in thẻ đó.

Tôi đã cố gắng bên dưới tùy chọn (sau đây tất cả các liên kết được đề cập đến câu hỏi của tôi trong SO mà tôi đã yêu cầu phải tìm một cách thích hợp):
1) Generate SVG on php side using Canvas JSON
Không thành công
2) Using raw svg data generate png on server side
Thành công một phần: Đối mặt với các vấn đề như gói Word, Phông chữ Vấn đề, v.v. Cũng không thể tải hình ảnh có thể in được. (Nếu sử dụng cao hơn DPI thì vấn đề xuất hiện như gắn SS) Kiểm tra dưới đây SS:

enter image description here

3) Generate Printable PDF using SVG raw data
phần: Không thể để có được in PDF

4) generate svg using raw data of svg in imagick
Không thành công: Không thể tạo hình ảnh svg (vấn đề BG, vấn đề hình ảnh).

5) Trực tiếp tạo SVG sử dụng dữ liệu thô

$file_name = uniqid($prefix).".svg"; 
$file_handle = fopen("$folder_name/".$file_name, 'w'); 
fwrite($file_handle, $raw_svg); 
fclose($file_handle); 

NO Success: Font không tải, không thể mở rộng (có nghĩa là chất lượng in)

Vì vậy, câu hỏi của tôi là cách tốt nhất để là gì tạo SVG & PNG làm cho hình ảnh BG, Hình ảnh đã tải lên, khác biệt. phông chữ vv với chất lượng in được.

Lưu ý: Tôi tập trung nhiều hơn vào SVG vì khách hàng thích điều đó, nếu tôi có thể nhận được chất lượng in trong PNG nó cũng có thể hoạt động. Ngoài ra tôi đã sử dụng imagick để đạt được SVG để PNG cuộc hội thoại. Nhưng không thể có được chất lượng in được (khi vấn đề DPI cao hơn như trên xảy ra SS).

+0

Tôi đã cố gắng bao gồm tất cả các nghiên cứu của tôi và những gì tôi đã thử cho đến nay. Vì vậy, nếu có bất kỳ thay thế xin vui lòng cho tôi biết. như thay thế imagemagick hoặc bất kỳ phương pháp nào. Vì vậy, tôi có thể đạt được sản lượng mong muốn của tôi. – DS9

+1

Tôi không chắc về khả năng SVG, nhưng bạn có thể sử dụng PhantomJS trên máy chủ. Về cơ bản, nó là trình duyệt WebKit không đầu có thể hiển thị nội dung giống như trình duyệt của người dùng. Và sau đó bạn có thể hiển thị hình ảnh đó (PNG) cũng như PDF. Bạn cũng có thể thực thi Mã JS của riêng bạn, có thể mở ra nhiều khả năng hơn nữa. Có lẽ đó là một lựa chọn? Bạn vẫn có thể tích hợp vào PHP bằng shell_exec và tương tự. – matths

+1

vấn đề với dữ liệu toSVG thực tế là gì? là một SVG thực tế. Để chuyển đổi SVG thành PNGs imagemagick là không tốt? – AndreaBogazzi

Trả lời

1

Cách đáng tin cậy nhất để hiển thị nội dung, IMHO, là webkit xem xét sử dụng wkhtmltopdf để tạo tệp PDF chất lượng có thể in từ nội dung web đầu vào, sử dụng phông chữ khác nhau.

Bạn có thể cài đặt bằng cách sao chép và dán mã nhị phân vào máy chủ của mình.

Nó được biên dịch sẵn và bạn tải xuống các tệp nhị phân cho các bản phân phối phổ biến.

này có thể được cài đặt trên trình duyệt, xem ví dụ sau:

Bạn có thể gọi wkhtmltopdf từ php sử dụng passthru như thế này:

echo("<pre>"); 
passthru("/full/path/to/your/wkhtmltopdf input_html_with_svg_inside.html output.pdf 1>&2"); 
echo("</pre>"); 

Sau đó, bạn có thể sử dụng convert từ gói ImageMagick để chuyển đổi nó đến một png minh bạch ví dụ.

Ngoài ra, cài đặt phông chữ trên máy chủ, bạn sẽ không phải lúc nào cũng nhận được tất cả các phông chữ phù hợp, nhưng bạn có thể tìm thấy các gói phông chữ trực tuyến mà bạn có thể cài đặt miễn phí. cũng có wkhtmltopng.

HTH.

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