【发布时间】:2019-04-14 20:16:42
【问题描述】:
第二次更新:
再次感谢所有评论/回答我的问题的人
问题已解决: 我无法在生成的 PDF 上使画布图像看起来更好,并且项目的截止日期即将结束,最后,我决定将“PDF 报告”功能从前端(Angular)移到后端(python) ,我已经发布了一个答案(不是我自己的问题的真正答案,而更像是一个解决方案)
搜索几天后更新:
我已将 Chart.js 替换为 Echarts,但仍然存在模糊问题。网上查了很多jsPDF和Canvas blurry,好像canvas设置需要自定义,可惜不知道怎么实现。
原问题:
我有一个 Angular 项目,需要下载 PDF 以获取图形数据。我选择 Chart.js 和 jspdf 效果很好。当我在一页中打印 2 个图表时,分辨率还可以,但是当我尝试在同一页上打印 3 个图表时,文本模糊。我已阅读此similar question,但不知道如何在拥有多个图表时提高分辨率。
HTML 代码:
<div class="col-md-4">
<div class="card card-chart">
<div class="card-header">
<h5 class="card-title">Cervical Lateral Flexion</h5>
<!--<p class="card-category">Line Chart</p>-->
</div>
<div class="card-body">
<canvas id="cervicalLateralFlexion"></canvas>
</div>
</div>
</div>
打字稿代码:
public static buildChart(doc, selector, title, yHeight) {
let height = yHeight;
const canvas = document.querySelector(selector) as HTMLCanvasElement;
doc.setFontSize(h5);
doc.text(leftMargin, yHeight, title);
const canvasImage = canvas.toDataURL('image/png');
height += margin;
doc.addImage(canvasImage, 'PNG', leftMargin, height);
}
有人可以帮忙吗?如何解决这个问题?提前致谢! 图 1 是它在网页上的样子,图 2 是 PDF 文件。
【问题讨论】:
-
看起来图像尺寸在第二张图像中发生了变化。模糊可能是因为图像被拉伸了。
-
你使用的是哪个jspdf版本?
-
问题是图像的 PDF 副本上的双线性过滤,因为其大小设置与图像像素大小不匹配。您对
doc.addImage的调用看起来像是错误的论点。doc.addImage(img, format, xPos, yPos, width, height, alias)确保画布分辨率与 PDF 文档中的显示尺寸相匹配。试试doc.addImage(canvasImage, 'PNG', leftMargin, yPos, canvas.width, canvas.height, "graph")你必须创建yPos
标签: angular pdf canvas html5-canvas jspdf