将 PHP 与 Google 图表和 table 导出为 PDF
Export PHP with Google charts and table as PDF
我有一个 PHP 页面,上面有 Google 个图表,下面有一个 table 需要导出为 PDF。
我试过使用
var doc = new jsPDF();
doc.addImage(chart.getImageURI(), 0,0);
doc.save('chart.pdf');
用于 google 图表和 dompdf 用于 table 但显然当同时使用这两种代码时它不起作用。
有没有办法将整个页面或图表的 PDF 页面和 table 的第 2 页全部导出到同一个 PDF 文件中?
您可以使用 html2canvas 获取整个页面的图像,
然后将其发送到 pdf...
只需确保图表和table都已绘制完成。
请参阅以下工作片段...
$(document).ready(function() {
google.charts.load('current', {
packages: ['corechart', 'table']
}).then(function () {
var data = new google.visualization.arrayToDataTable([
['x', 'y0', 'y1'],
['0-10', -3, 3],
['11-20', -2.5, 2.5],
['21-30', -2, 2],
['31-40', -1.5, 1.5],
]);
var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
var chartReady = false;
var table = new google.visualization.Table(document.getElementById('table_div'));
var tableReady = false;
google.visualization.events.addListener(chart, 'ready', onChartReady);
google.visualization.events.addListener(table, 'ready', onTableReady);
chart.draw(data, {
hAxis: {
format: '#,##0.000',
ticks: [
{v: -8, f: '8.000'},
{v: -6, f: '6.000'},
{v: -4, f: '4.000'},
{v: -2, f: '2.000'},
0, 2, 4, 6, 8
]
},
isStacked: true
});
table.draw(data);
function onChartReady() {
chartReady = true;
onIsReady();
}
function onTableReady() {
tableReady = true;
onIsReady();
}
function onIsReady() {
if ((chartReady) && (tableReady)) { html2canvas($('#dashboard_div').get(0)).then(function(canvas) {
// export pdf
var pdfDoc = new jsPDF({
orientation: 'landscape',
unit: 'px',
format: [canvas.width, canvas.height]
});
pdfDoc.addImage(canvas.toDataURL('image/png'), 0, 0);
pdfDoc.save('page.pdf');
});
}
}
});
});
.table {
text-align: center;
}
#table_div {
display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.5/dist/html2canvas.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jspdf@1.5.3/dist/jspdf.min.js"></script>
<div id="dashboard_div">
<div id="chart_div"></div>
<div class="table">
<div id="table_div"></div>
</div>
</div>
我有一个 PHP 页面,上面有 Google 个图表,下面有一个 table 需要导出为 PDF。
我试过使用
var doc = new jsPDF();
doc.addImage(chart.getImageURI(), 0,0);
doc.save('chart.pdf');
用于 google 图表和 dompdf 用于 table 但显然当同时使用这两种代码时它不起作用。
有没有办法将整个页面或图表的 PDF 页面和 table 的第 2 页全部导出到同一个 PDF 文件中?
您可以使用 html2canvas 获取整个页面的图像,
然后将其发送到 pdf...
只需确保图表和table都已绘制完成。
请参阅以下工作片段...
$(document).ready(function() {
google.charts.load('current', {
packages: ['corechart', 'table']
}).then(function () {
var data = new google.visualization.arrayToDataTable([
['x', 'y0', 'y1'],
['0-10', -3, 3],
['11-20', -2.5, 2.5],
['21-30', -2, 2],
['31-40', -1.5, 1.5],
]);
var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
var chartReady = false;
var table = new google.visualization.Table(document.getElementById('table_div'));
var tableReady = false;
google.visualization.events.addListener(chart, 'ready', onChartReady);
google.visualization.events.addListener(table, 'ready', onTableReady);
chart.draw(data, {
hAxis: {
format: '#,##0.000',
ticks: [
{v: -8, f: '8.000'},
{v: -6, f: '6.000'},
{v: -4, f: '4.000'},
{v: -2, f: '2.000'},
0, 2, 4, 6, 8
]
},
isStacked: true
});
table.draw(data);
function onChartReady() {
chartReady = true;
onIsReady();
}
function onTableReady() {
tableReady = true;
onIsReady();
}
function onIsReady() {
if ((chartReady) && (tableReady)) { html2canvas($('#dashboard_div').get(0)).then(function(canvas) {
// export pdf
var pdfDoc = new jsPDF({
orientation: 'landscape',
unit: 'px',
format: [canvas.width, canvas.height]
});
pdfDoc.addImage(canvas.toDataURL('image/png'), 0, 0);
pdfDoc.save('page.pdf');
});
}
}
});
});
.table {
text-align: center;
}
#table_div {
display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.5/dist/html2canvas.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jspdf@1.5.3/dist/jspdf.min.js"></script>
<div id="dashboard_div">
<div id="chart_div"></div>
<div class="table">
<div id="table_div"></div>
</div>
</div>