在 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 二进制文件,因此您可能别无选择。
所以我有一个最初构建在 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 二进制文件,因此您可能别无选择。