PDFKit:PNG的未知图像格式错误

PDFKit: Unknown image format error for PNG

本文关键字:图像 格式 错误 未知 PNG PDFKit      更新时间:2023-09-26

我在浏览器中使用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类型为"images/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;

当这条线从更改时,这对JPEGs来说很好

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中吗?如果是,你使用了什么方法?

我找到了一个如下的解决方案https://github.com/devongovett/pdfkit/blob/master/lib/image.coffee只需确保你的png文件的名字以大写结尾。png,它对我有用。