Это своего рода конкретная проблема, но я предполагаю, что она может оказаться полезной в какой-то момент для кого-то еще, если я смогу найти решение.highcharts и canvg scaling issue
Мне нужно преобразовать некоторые из моих графиков Highcharts в PNG в конец браузера. Идея заключается в том, что когда наши авторы создают график, он автоматически преобразуется в PNG и что PNG будет сохранен вместе с JS-кодом для данного графика. Затем мы можем использовать эту версию PNG в ситуациях, когда JS не является вариантом. У меня все работает через библиотеку canvg, и это прекрасно.
Ну, почти. Из-за всех экранов с высоким разрешением на дюйм мы хотим, чтобы PNG был увеличен в два раза больше, чем обычно отображаются графики. Таким образом, версия PNG может хорошо выглядеть на iPhone/iPad и т. Д.
У canvg есть некоторые возможности масштабирования, поэтому я попытался их использовать. Но именно там он начинает разрушаться. График масштабируется правильно, но в объекте Highcharts есть поле, которое не масштабируется вместе со всем остальным, а полученный масштабированный график показывает только верхний левый угол красиво масштабированного графика.
Я посмотрел на код canvg и довольно быстро понял, что мои возможности JS недостаточно хороши, чтобы понять, что происходит, то же самое для конца Highcharts.
Если кто-то имеет идеи или знает о простом решении для этого, я был бы чрезвычайно благодарен.
Чтобы повторить вопрос вы можете взглянуть на этот JSFIDDLE примера я вместе взятые:
И вот код, если JSFIDDLE страница испортится или исчезает как-то.
<script src="http://code.highcharts.com/highcharts.js">http://code.highcharts.com/highcharts.js</script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/rgbcolor.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/canvg.js"></script>
<p>Highcharts</p>
<div id="container" style="height: 400px; margin-top: 1em"></div>
<p>Canvas</p>
<canvas id="canvas"></canvas>
<p>Image</p>
<div id="image"><div>
<script type="text/javascript">
$(function() {
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container'
},
credits: {
enabled: false
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}],
navigation: {
buttonOptions: {
enabled: false
}
},
exporting: {
type: 'image/jpeg'
}
});
var chart_svg = chart.getSVG();
var chart_canvas = document.getElementById('canvas');
canvg(chart_canvas, chart_svg, {scaleWidth: 1280, scaleHeight: 860});
var chart_img = chart_canvas.toDataURL('image/png');
jQuery('#image').append('<img src="' + chart_img + '" />');
});
</script>
Скотт, это именно то, что я хотел сделать. Лучшее решение или нет, это работает. :) По какой-то причине я не думал о явной высоте/ширине объекта svg, вызывающего проблему. –
И просто быть понятным. СПАСИБО! –