如何在jsPDF中使用setCurrentTransformationMatrix

问题描述 投票:0回答:1

我正在使用 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 的工作原理,或者我的代码有问题?

screenshot of circle.pdf

jspdf
1个回答
0
投票

有两个问题,一是单位是相对于图像原点而不是 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)
© www.soinside.com 2019 - 2024. All rights reserved.