I’m ussing highcharts in my project and I’m abit new in that. My problem is that how to get a capture of my chart and then send it by email? for email sending I’m ussing PHPMailer, the email works correctly. I searched in highcharts documentation they propose node export-server, but there is no example. I got some hints from internet but doesn’t work. I want, when I click on send chart by email button, it sould take the picture of chart and send it to email. So, can anybody kindly help me please with an example? A simple example of My code is bellow:
// import highcharts and export server <script src="https://code.highcharts.com/highcharts.js"></script> <script src="https://code.highcharts.com/modules/exporting.js"></script> // sendGraphByMail is my PHPMailer configuration file <a href="sendGraphByMail.php"> <button class="send-chart" onclick="sendChart()">Send chart by e-mail</button> </a> <div id="container"></div> <h2> Exported image below </h2> <img id="image" /> <script> var options = { chart: {}, 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], type: 'column' }] } var chart = Highcharts.chart('container', options); function sendChart() { console.log('Send chart button clicked !'); // I think the exprot script goes here }
a screen shot of page look like this.
Advertisement
Answer
I want to answer myself:
- We use html2canvas for taking an screenshot.
- For sending email we use SMTPJS.
for email sending we use elasticemail provider, because SMTP accept only elastic email provider. Note: don’t forgate to import both smtpJS and html2canvas
<script src="https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.5/dist/html2canvas.min.js"></script> <script src="https://smtpjs.com/v3/smtp.js"></script>
function sendChart() { // get the div id where you dispaly the highchart let chart = document.getElementById('yourChartId'); // Use the html2canvas function to take a screenshot html2canvas(chart).then( function(canvas) { canvas.style.display = 'none' document.body.appendChild(canvas); Email.send({ //SecureToken: 'your security(-4d2c-86ac-41f939394144)', Host: "smtp.elasticemail.com", Username: "yourEmail@domain.com", Password: "yourPassword", To: 'reciever@gmail.com', // To: document.getElementById('idname').value, // if you want to get by form From: "yourEmail@domain.com", Subject: "Highchart graph", Body: "Hello, the body of your email", Attachments: [{ name: "chart.png", data: canvas.toDataURL() }] }) .then( message => alert(message == 'OK' ? 'Email sent successfully' : message) ); }) }