我正在使用 ngx-graph 来显示一些图形。由于没有直接下载图形的功能,我环顾四周,发现人们使用 ngx-charts 和 html2canvas 来生成可下载的图表画布。
现在我正在尝试使用 html2canvas 生成我的图形的可下载画布,但是 html2canvas 生成的画布使我的图形的一些内容变黑。
1) 缺少部分节点块文本
2) 链接节点的线丢失,而箭头提示可见。
我的 ngx-graph 实现中的代码:
<div id="graph" #graph>
<ngx-graph class="chart-container" [links]="links" [nodes]="nodes" [legend]="false" [draggingEnabled]="false">
<ng-template #defsTemplate>
<svg:marker id="arrow" viewBox="0 -5 10 10" refX="8" refY="0" markerWidth="4" markerHeight="4" orient="auto" fill="white">
<svg:path d="M0,-5L10,0L0,5" class="arrow-head" />
</svg:marker>
</ng-template>
<ng-template #nodeTemplate let-node>
<svg:g class="node">
<svg:rect [attr.width]="node.dimension.width" [attr.height]="node.dimension.height" fill="white"/>
<svg:text alignment-baseline="central" [attr.x]="10" [attr.y]="node.dimension.height / 2">{{node.label}}
</svg:text>
</svg:g>
</ng-template>
<ng-template #linkTemplate let-link>
<svg:g class="edge">
<svg:path class="line" stroke-width="3" marker-end="url(#arrow)">
</svg:path>
</svg:g>
</ng-template>
</ngx-graph>
</div>
<button mat-button (click)="downloadAsPicture()" [disabled]="false">
<mat-icon>cloud_download</mat-icon><span>Download as .png</span>
</button>
我的 html2canvas 实现中的代码:
downloadAsPicture() {
html2canvas(document.getElementById("graph"), {height: 500})
.then(function(canvas){
var imgURL = canvas.toDataURL("image/png");
var dlLink = document.createElement('a');
dlLink.download = "image";
dlLink.href = imgURL;
dlLink.dataset.downloadurl = ["image/png", dlLink.download, dlLink.href].join(':');
document.body.appendChild(dlLink);
dlLink.click();
document.body.removeChild(dlLink);
canvas.remove;
});
我感谢任何帮助,还包括 ngx-graph 的替代品,我想要实现的目标可能更直接。
非常感谢。