Экспорт графиков D3.js в статические файлы SVG, программно
Я генерирую большое количество графиков D3 программно. В настоящее время они состоят из HTML с SVG, CSS и JS.
Я хотел бы экспортировать эти графики в простой SVG программно. Мне сложно понять, как это сделать.
Самое близкое решение, которое я нашел, это следующее: Преобразовать SVG сгенерированный JavaScript в файл - но проблема в том, что мне нужно делать это программно, а не используя инструмент Chrome Developer Tools или SVG Crowbar, который требует ручного нажатия и сохранения.
Я бы предпочел использовать Python, но в этот момент я открыт для любых инструментов/языка программирования.
Ответы
Ответ 1
Вот что я буду делать:
-
Загрузите и установите phantomjs, который является браузером безглавых веб-китов, который вы можете запускать из командной строки и автоматизировать с помощью скриптов.
-
Сохраните этот javascript как renderHTML.js:
var args = require('system').args,
page = require('webpage').create(),
url = args[1];
page.onConsoleMessage = function (msg) {
console.log(msg);
};
page.onLoadFinished = function() {
page.evaluate(function() {
console.log(document.documentElement.outerHTML);
});
phantom.exit();
};
page.open(url);
-
Запустите phantomjs с указанным выше script, указав URL-адрес для отображения, например:
phantomjs renderHTML.js {urltorender} > {localfiletosave}
-
Теперь у вас есть весь HTML-контент документа по указанному URL-адресу, включая изменения динамического контента, выполненные с помощью javascript (до загрузки страницы) в локальном файле. Отправьте локальный файл в соответствии с вашими требованиями, используя любой язык, который вам нравится.
Если вам необходимо внести изменения в javascript перед сохранением файла, вы можете использовать phantomjs api для отправки и/или ожидания событий перед вызовом console.log. Просто измените script на шаге 2.
Если вам известно и нравится javascript, вы можете пропустить шаг 4 и поставить любую "почтовую обработку", которую вы имеете в виду, непосредственно в script на шаге 2.
Ответ 2
Я написал небольшую программу Javascript для этого.
Вы можете отключить его npm
, запустив npm install -g playfair
(код находится в GitHub в manleyjster/playfair
).
Он запускается из командной строки и работает, запуская PhantomJS, указывая его на html файл (который вы передаете в командной строке), а затем захватывает первый элемент SVG, который он находит на странице.
Вы также можете передать идентификатор с помощью параметра командной строки, чтобы выбрать элемент SVG по идентификатору.
Мягкой программой является эта функция:
function getSvg(selector) {
var svgNode, tmp;
svgNode = document.querySelector(selector);
if (svgNode) {
tmp = document.createElement('div');
tmp.appendChild(svgNode);
result = { text: tmp.innerHTML };
} else {
result = {};
}
return result;
}
Ответ 3
Вы можете сделать это с помощью phantomJS. Его безголовый веб-браузер, поэтому вы можете написать script, чтобы вытащить svg со своей страницы и записать его в файл.