我正在尝试从我的网站将复杂的 SVG 块(使用 c3 生成)导出为图像(无论是 png、svg、pdf,此时我对任何解决它的方法都持开放态度,尽管矢量格式是理想的) . 我尝试过 html2canvas、canvg、jsPDF 以及该帮派的所有酷孩子。问题是:我的一个情节都搞砸了。线变成了区域,区域被反转了,颜色被破坏了,......你的名字。
我离成为 js 专家还差得很远。我刚到这里,我正在寻找我的路,有些人请多多包涵。
我不知道这是 CSS 问题还是什么。是的,我们在 html 后面确实有 CSS。
我的临时解决方案是使用 jQuery.print.js 来调用我的 div 的打印。由于许多原因,这远非理想:
没有bbox。它生成由用户定义的页面大小的 PDF,而不是图像大小;
我正在使用具有自动调整大小的引导卡。每当按下“打印图像”时,打印都会使用当前尺寸。我已经尝试隐藏卡片来重新调整目标卡片的大小,但是调整大小只会在打印调用之后发生,原因我不知道。如果这个问题解决了,这个临时解决方案会更好,虽然仍然是临时的。
所以,一个问题是:
- 如何获得如图所示的 SVG?
- 或者,如何在调用打印之前调整卡片的大小?
- 或者,如何在没有从 canvg/jsPDF 获得的格式错误的情况下生成栅格(png/jpeg)?
现在执行打印调用的函数是:
function getscreenshot(div) {
// Hide row pair:
$('#map-card').addClass('hidden');
// Temporarily change class attr to spawn all row:
var divClass = $(div).attr('class');
$(div).attr('class', 'col');
// ****PROBLEM****
// Div size is not upated before calling print()
// causing the print to have the size as displayed on user screen
// How to refresh it before print?
// ********
// jQuery.print solves it in a non-ideal way, since user has to set save as file and so on
$(div).print();
// This solution with jsPDF produces **ugly as hell** image:
// var pdf = new jsPDF('landscape');
// pdf.addHTML(document.getElementById(div), function() {
// pdf.save(name + 'pdf');
// });
// Recover original size after print:
// Restore row pair and div original state:
$('#map-card').removeClass('hidden');
$(div).attr('class', divClass);
}
右边的情节是我正在集中尝试的情节,也是正在完成未格式化的情节。检查使用 html2canvas、jsPDF 等产生的结果与使用 canvg.js使用 SVG pasteed 时出现的错误构造相同
PS:是的,我确实搜索了很多。这就是我最终尝试 html2canvas、canvg、jsPDF、jqprint 的方式...
干杯!