对图像使用旋转会导致带有pdfkit的空白pdf

时间:2018-06-25 18:56:30

标签: node.js typescript pdfkit node-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文件之前重写文件。

谢谢

1 个答案:

答案 0 :(得分:0)

好的,经过调查,我可以回答我自己的问题:)。

由于文件的大小,我可以看到图像以某种方式包含在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轴。

希望对以后的工作有所帮助。