Использование поворота для изображений приводит к пустому PDF с pdfkit
Я задал вопрос о хранилище напрямую, но по моему опыту SO более реактивен.
Привет всем,
Я пытаюсь создать 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.
Спасибо
2 ответа
Хорошо, после расследования я могу ответить на свой вопрос:).
Я мог видеть, что изображения были как-то в формате 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.
Надеюсь, это поможет некоторым позже:).
Это потому, что при съемке с камеры, если ISO изображения меньше 100, оно будет автоматически повернуто, сделайте снимок с ISO больше или равным 100, чтобы избежать автоповорота.