在 windows 上将 pdf 转换为图像不适用于 Nodejs sharp

converting pdf to an image is not working with Nodejs sharp on windows

所以我有一个最初构建在 OSX(macbook) 上的 Nodejs 应用程序。该过程的一部分是从用户上传的 pdf 文件的第一页创建缩略​​图。

下面是在 OSX.

上运行良好的代码
const generateThumbnailForFile = async ( fileDirName: string, fileFolder: string, fileName: string, template?: string ) => {
      // this part will generate an image of pdf first page and composite to a template        
      if (template) {
                    
           return await sharp(fileDirName, {
               page: 0
           })
           .rotate()
           .resize({
               width: 350,
               height: 500,
               fit: sharp.fit.cover,
               position: sharp.position.top
           })
           .jpeg({
               quality: 100,
               chromaSubsampling: '4:4:4'
           })
           .composite([ { input: dir + 'templates/' + template, gravity: 'southeast' } ])
           .toFile(dir + 'thumbnail/' + fileFolder.replace(/[.*+?^${}()|/[\]\]/g, '-') + '-' + uploadFileName + '.jpg')
           .then(( info: any ) => {                            
               thumbUrl = 'thumbnail/' + fileFolder.replace(/[.*+?^${}()|/[\]\]/g, '-') + '-' + uploadFileName + '.jpg'
            })
            .catch(( err: any ) => {
                console.log('PDF ERROR HERE', err)
                thumbUrl = 'thumbnail/default-pdf.png'
             })
       }
       // this part will run if no template is supplied, mainly for images
         else {
            return await sharp(fileDirName)
                        .rotate()
                        .resize({
                            width: 500,
                            height: 500,
                            fit: sharp.fit.cover,
                            position: sharp.position.top
                        })
                        .toFile(dir + 'thumbnail/' + fileFolder.replace(/[.*+?^${}()|/[\]\]/g, '-') + '-' + fileName)
                        .then(( info: any ) => {
                            thumbUrl = 'thumbnail/' + fileFolder.replace(/[.*+?^${}()|/[\]\]/g, '-') + '-' + fileName
                        })
                        .catch(( err: any ) => {
                            console.log('Thumbnail generation error: ', err)
                            thumbUrl = 'thumbnail/default-pdf.png'
                        })
                }

            }

解释一下上面的代码,每次上传一个文件,都会调用上面的函数,为上传的文件生成缩略图(文件可以是图片类型,也可以是pdf) 同样,上面的代码在 OSX 上运行良好。如果有帮助,该应用程序是一个 loopback4 应用程序。

但是,相同的代码不适用于 Windows 仅适用于 pdf,但图像可以。 我尝试了各种方法,重新安装 node_modules、upgrading/downgrading 版本,我也研究了 libvips,但基于 sharp 的网站,只需 运行 npm install sharp 就可以了作业,不需要 libvips 的其他配置。

运行 on Windows 时的错误 returns 是 Error: Input file contains unsupported image format

如果有人能帮助我,我将不胜感激。

libvips PDF加载通常使用poppler进行渲染,poppler是GPL:

https://poppler.freedesktop.org/

许可证意味着 sharp 不能分发包含 poppler 的二进制文件。在 macOS 上,您使用的是来自自制软件的 libvips,所以这不是问题。

libvips 也支持 PDFium 进行 PDF 渲染,但是 sharp 还没有切换到它。 sharp 不允许您在 windows 上使用不同的 libvips 二进制文件,因此您可能别无选择。