У меня есть страница с некоторыми SVG, и я хочу сгенерировать из нее PDF. Для этой цели я использую Летающая тарелка с OpenPDF , и я преобразовал SVG в изображения, используя:
var $body_clone = $('#pdf_container').clone();
var $svgs = $body_clone.find('svg');
var $svg;
var xml;
var data;
var $img;
for (var i=0; i<$svgs.length; i++) {
var $svg = $svgs.eq(i);
xml = new XMLSerializer().serializeToString($svg[0]);
data = "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(xml)));
$img = $(new Image());
$img.attr('src', data);
$img.width($svg.outerWidth(true));
$img.height($svg.outerHeight(true));
$svg.replaceWith($img[0].outerHTML);
}
Я попытался удалить clone()
и отправить, и это работает: SVG заменяются на странице (некрасивыми) изображениями.
Восстанавливая clone()
и отправляя форму, я отправляю html $body_clone
на сервер, где добавляется специальный шаблон для PDF, используя Mustache
. Затем я очищаю html, преобразованный в xhtml с помощью jsoup
, я преобразую его с помощью Flying Saucer и отправляю в ответ http.
Я получаю PDF-файл только с текстом. SVG, преобразованные в изображения, отсутствуют.
Я также добавил -Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols
, как предложено в этом SO ответе , но ничего. Я подозреваю, что проблема в src
изображений, например, не data:image/png
, а data:image/svg+xml
.
В любом случае я пытался напечатать всю страницу с помощью браузера (Firefox), распечатывая в файл в формате PDF (Lubuntu). Не только изображения показаны, но они идеально подходят. Что Lubuntu использует для печати в PDF? Можно ли использовать его как внешний конвертер? Если нет, то как это работает, и есть способ эмулировать печать в файл?