PDFKit: неизвестная ошибка формата изображения для PNG
Я использую предустановленную версию PDFKit в браузере, и при попытке добавить PNG я получаю следующую ошибку:
Uncaught Error: Unknown image
PDFImage.open format.util.js:546
module.exports.image deflate.js:773
img.onload PDFrenderer.js:195
Я конвертирую свои изображения в PNG на сервере (чтобы обрезать их в круги), и тип MIME изображений, возвращаемых сервером, это 'image/png'. Я не уверен, что метод, который я использую для преобразования PNG в ArrayBuffer, является неправильным.
Вот код, который я использую для извлечения PNG и преобразования его в ArrayBuffer:
var img = new Image, ctxData;
img.onError = function () {
throw new Error('Cannot load image: "' + url + '"');
}
img.onload = function () {
var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
ctxData = canvas.toDataURL('image/png').slice('data:image/png;base64,'.length);
ctxData = atob(ctxData);
document.body.removeChild(canvas);
var buffer = [];
for (var i = 0, l = ctxData.length; i < l; i++) {
buffer.push(ctxData.charCodeAt(i));
buffer._isBuffer = true;
buffer.readUInt16BE = function (offset, noAssert) {
var len = this.length;
if (offset >= len) return;
var val = this[offset] << 8;
if (offset + 1 < len)
l |= this[offset + 1];
return val;
}
}
pdf.image(buffer);
}
img.src = url;
Это хорошо работает для JPEG, когда эта строка изменяется с
ctxData = canvas.toDataURL('image/png').slice('data:image/png;base64,'.length);
в
ctxData = canvas.toDataURL('image/jpeg').slice('data:image/jpeg;base64,'.length);
однако мне нужно иметь возможность передавать PNG, чтобы я мог размещать круглые изображения на любом фоне.
Я также попытался передать полный URL-адрес (например, " http://mysite.dev/userimages/1234/roundavatar.png"), однако затем я получил следующую ошибку:
Uncaught TypeError: undefined is not a function
PDFImage.open util.js:535
module.exports.image deflate.js:773
Кто-нибудь имел успех добавлять PNG-файлы в PDFkit через браузер, и если да, то какой метод вы использовали?
1 ответ
Я нашел решение в соответствии с этим https://github.com/devongovett/pdfkit/blob/master/lib/image.coffee просто удостоверьтесь, что вы называете ваши файлы png с заглавной буквы.PNG, оно работает для меня.