对图像使用旋转会导致带有 pdfkit 的空白 pdf
Using rotate for images leads to blank pdf with pdfkit
我直接在存储库上问过这个问题,但根据我的经验,SO 更具反应性。
嘿,
我正在尝试使用 pdfkit 从照片创建 pdf。
根据图像是横向模式还是纵向模式,我想翻转图像。
这基本上意味着以下内容(打字稿):
function toPostscriptPoint(mm: number) {
return mm * 2.8346456693;
}
const document = new PDFDocument({
size: [toPostscriptPoint(156), toPostscriptPoint(106)],
});
document.pipe(fs.createWriteStream('output.pdf'));
document.save();
document.rotate(90);
document.image(
'photos/sample.jpeg',
{ width: toPostscriptPoint(150), fit: [toPostscriptPoint(150), toPostscriptPoint(100)] });
document.restore();
document.end();
但发生的是 pdf 呈现完全白色。但是我确实看到发生了一些事情,因为 pdf 具有输入图像的大小。
不支持图片旋转吗?可能的替代方案是什么?我想避免在将文件放入 pdf 之前重写文件。
谢谢
好吧,经过调查,我可以回答我自己的问题:)。
由于文件的大小,我可以看到图像以某种方式在 pdf 中,所以我深入研究了。
发生的事情是图像在视口外渲染。这是由于多种原因造成的:
- pdfkit默认旋转后的页面原点为页面中心! (有关详细信息,请参阅 the doc)
- 原点与变换一起旋转。
- image方法中的x和y其实是倒过来的
所以在所有这些都正确之后,下面的代码显示了预期的图像:
function toPostscriptPoint(mm: number) {
return mm * 2.8346456693;
}
const document = new PDFDocument({
size: [toPostscriptPoint(156), toPostscriptPoint(106)],
});
document.pipe(fs.createWriteStream('output.pdf'));
document.save();
document.rotate(90, {origin : [0, 0]});
document.image(
'photos/sample.jpeg',
toPostscriptPoint(0),
toPostscriptPoint(-150),
{ width: toPostscriptPoint(150), height: toPostscriptPoint(100) });
document.restore();
document.end();
注意:
- 旋转中的原点参数
- toPostscriptPoint(-150)其实考虑了原点的位置,对应X轴
希望对以后有所帮助:)。
因为是用相机拍照,如果图片ISO小于100会自动旋转,用iso大于等于100的图片避免自转。
我直接在存储库上问过这个问题,但根据我的经验,SO 更具反应性。
嘿,
我正在尝试使用 pdfkit 从照片创建 pdf。 根据图像是横向模式还是纵向模式,我想翻转图像。
这基本上意味着以下内容(打字稿):
function toPostscriptPoint(mm: number) {
return mm * 2.8346456693;
}
const document = new PDFDocument({
size: [toPostscriptPoint(156), toPostscriptPoint(106)],
});
document.pipe(fs.createWriteStream('output.pdf'));
document.save();
document.rotate(90);
document.image(
'photos/sample.jpeg',
{ width: toPostscriptPoint(150), fit: [toPostscriptPoint(150), toPostscriptPoint(100)] });
document.restore();
document.end();
但发生的是 pdf 呈现完全白色。但是我确实看到发生了一些事情,因为 pdf 具有输入图像的大小。
不支持图片旋转吗?可能的替代方案是什么?我想避免在将文件放入 pdf 之前重写文件。
谢谢
好吧,经过调查,我可以回答我自己的问题:)。
由于文件的大小,我可以看到图像以某种方式在 pdf 中,所以我深入研究了。
发生的事情是图像在视口外渲染。这是由于多种原因造成的:
- pdfkit默认旋转后的页面原点为页面中心! (有关详细信息,请参阅 the doc)
- 原点与变换一起旋转。
- image方法中的x和y其实是倒过来的
所以在所有这些都正确之后,下面的代码显示了预期的图像:
function toPostscriptPoint(mm: number) {
return mm * 2.8346456693;
}
const document = new PDFDocument({
size: [toPostscriptPoint(156), toPostscriptPoint(106)],
});
document.pipe(fs.createWriteStream('output.pdf'));
document.save();
document.rotate(90, {origin : [0, 0]});
document.image(
'photos/sample.jpeg',
toPostscriptPoint(0),
toPostscriptPoint(-150),
{ width: toPostscriptPoint(150), height: toPostscriptPoint(100) });
document.restore();
document.end();
注意:
- 旋转中的原点参数
- toPostscriptPoint(-150)其实考虑了原点的位置,对应X轴
希望对以后有所帮助:)。
因为是用相机拍照,如果图片ISO小于100会自动旋转,用iso大于等于100的图片避免自转。