我正在使用 TypeScript、Node.js 和 jsPDF,并且在 jsPDF 中遇到了 setCurrentTransformationMatrix 方法的问题。我的目的是绘制一个以 (100,100) 为圆心、半径为 100 的圆。但是,输出的 PDF 并未反映这一点。下面是我正在使用的代码:
import { jsPDF } from 'jspdf';
const doc = new jsPDF({ unit: 'mm' });
doc.setCurrentTransformationMatrix(doc.Matrix(1, 0, 0, 1, 100, 100));
doc.circle(0, 0, 100);
doc.save('output/circle.pdf');
我预计这段代码会生成一个以 (100,100) 为中心的圆的 PDF,但实际结果有所不同。 (我附上了输出图像以供参考。)
有人可以帮我理解这里出了什么问题吗?我是否误解了 setCurrentTransformationMatrix 的工作原理,或者我的代码有问题?
有两个问题,一是单位是相对于图像原点而不是 PDF 原点,所以 PDF 构造通常需要 Y 反转,所以向下是 -Y
另一个与缩放有关,因此您有一个基于毫米和英寸的混合标量。
为了得到你似乎渴望的东西?测试时使用的装饰。
我基于演示提出建议https://raw.githack.com/MrRio/jsPDF/master/index.html
/* global jsPDF */
var doc = new jsPDF({ unit: 'mm' });
doc.setDrawColor(0, 0, 255);
doc.setLineWidth(1);
doc.setCurrentTransformationMatrix(doc.Matrix(1, 0, 0, 1, 283.464566929134, -283.464566929134));
doc.circle(0, 0, 99);
doc.setCurrentTransformationMatrix(doc.Matrix(1, 0, 0, 1, -283.464566929134, 283.464566929134));
doc.setLineWidth(0.001);
doc.setFillColor(255, 0, 0);
doc.circle(100, 100, 100, "FD");
doc.line(0,0,100,100)