背景
我有一个记录表,该记录表使用“制表符”控件来允许用户进行排序,过滤等。 一旦他们在表中获得了想要的结果,我就需要提供一种方法,使用户可以使用PDF模板触发每行创建PDF。 在页面顶部,我有一个下拉菜单,他们可以在其中选择模板。例如,它将具有以下选项:
等
我知道该怎么做 1.我知道如何遍历jQuery中表中的选定记录 2.我知道如何创建基本的jsPDF文档。 3.“模板”机制将只是网页中预定义的2种不同。根据他们在下拉菜单中选择的选项,我可以确定要包括的徽标。
问题
似乎,除非将包含在PDF中的DIV可见,否则html2canvas将无法工作。
到目前为止,这是我一直在玩的原型代码: (除了我尝试以PDF格式显示的DIV在屏幕上显示的事实之外,其他所有方法都起作用。)
<div id="bluetemplate" class="ug_logo_style" style="display: none">
<img class="bluelogo"></img>
</div>
<div id="pinktemplate" class="ug_logo_style" style="display: none">
<img class="pinklogo"></img>
</div>
$("#templatedropdown").change(function(){
var selectedtemplate = this.value;
switch (selectedtemplate){
case 'blue':
$("div#bluetemplate").show();
$("div#pinktemplate").hide();
break;
case 'pink':
$("div#pinktemplate").show();
$("div#bluetemplate").hide();
break;
}
});
$("#btntemplate").click(function(){
switch($('#template option:selected').val()){
case 'blue':
var imgData;
html2canvas($("#bluetemplate"), {
useCORS: true,
onrendered: function (canvas) {
imgData = canvas.toDataURL(
'image/png');
var doc = new jsPDF({
orientation: 'landscape',
unit:'pt',
format:[400,200]});
doc.addImage(imgData, 'PNG', 10, 10);
doc.text(registrant.first_name + " " + registrant.last_name, 10, 100);
doc.text(registrant.email, 10, 120);
doc.save(registrant.event_id + '_' + registrant.id + '.pdf');
window.open(imgData);
}
});
break;
case 'pink':
var imgData;
html2canvas($("#pinktemplate"), {
useCORS: true,
onrendered: function (canvas) {
imgData = canvas.toDataURL(
'image/png');
var doc = new jsPDF({
orientation: 'landscape',
unit:'pt',
format:[400,200]});
doc.addImage(imgData, 'PNG', 10, 10);
doc.text(registrant.first_name + " " + registrant.last_name, 10, 100);
doc.text(registrant.email, 10, 120);
doc.save(registrant.event_id + '_' + registrant.id + '.pdf');
window.open(imgData);
}
});
break;
}
答案 0 :(得分:0)
您可以做的是暂时显示隐藏的div,将其转换为pdf,然后再次将其隐藏。但是,如果只显示徽标一秒钟是可以接受的,这只是一种解决方法。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js"
integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/"
crossorigin="anonymous"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
<!-- html2canvas 1.0.0-alpha.11 or higher version is needed -->
<script>
function download() {
let pdf = new jsPDF('p', 'pt', 'a4');
pdf.setProperties({
title: 'jsPDF sample'
}); // used for window.open() only
let bluetemplate = document.getElementById('bluetemplate');
bluetemplate.style.display = '';
pdf.html(document.body, {
callback: function () {
//pdf.save('test.pdf');
window.open(pdf.output('bloburl')); // to debug
bluetemplate.style.display = 'none';
}
});
}
</script>
答案 1 :(得分:0)
您是否尝试过将其添加到CSS中
.html2canvas-container { width: 3000px !important; height: 3000px !important; }
有关打印不可见内容的问题,请参考here。