Использование поворота для изображений приводит к пустому PDF с pdfkit - PullRequest
0 голосов
/ 25 июня 2018

Я задавал вопрос непосредственно в хранилище, но по моему опыту ТАК более реактивен.

Привет,

Я пытаюсь создать PDF из фотографий, используя pdfkit .В зависимости от того, находится ли изображение в альбомной или портретной ориентации, я хочу перевернуть изображение.

Это в основном означает следующее (в машинописном тексте):

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 голосов
/ 27 июня 2018

Хорошо, после расследования я могу ответить на свой вопрос:).

Я мог видеть, что изображения были как-то в pdf из-за размера файла, поэтому я углубился.

Произошло то, что изображение было визуализировано вне области просмотра.Это было связано с несколькими причинами: * По умолчанию источник страницы после поворота в pdfkit является центром страницы!(См. документ для получения дополнительной информации) * Источник вращается вместе с преобразованием.* 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.

Надеюсь, что это поможет некоторым позже:).

...