在 Node.js 和 CentOS 上使用 pdf2image
Using pdf2image with Node.js and CentOS
我正在使用 pdf2image
构建一个 Node.js 将 PDF 文件转换为 PNG 的应用程序。
正如 official repo 的自述文件所说,pdf2image
需要两个外部依赖项:Ghostscript 和 GraphicsMagick。两者都安装在我本地的Windows机器上
现在我可以使用以下代码将 PDF 文件缓冲区转换为 PNG 图像缓冲区:
const fromBuffer = require('pdf2pic').fromBuffer;
convertPdfToImg = async (pdfBuffer) => {
const pdf2picOptions = {
format: 'png',
width: 4000,
height: 5176,
density: 330,
savePath: './output',
};
const convert = fromBuffer(pdfBuffer, pdf2picOptions);
const pageOutput = await convert(1, true);
const pngBuffer = Buffer.from(pageOutput.base64, 'base64');
return pngBuffer;
};
一切正常,大家都很开心! (目前)
现在的问题是我需要在 Linux 环境 (CentOS Stream) 中将应用程序部署到生产环境,所以我在服务器上安装了依赖项,确保使用安装在我的服务器上的相同版本本地 Windows 机器(Ghostscript 9.52
和 GraphicsMagick 1.3.35 2020-02-23 Q16
)。但是,上面提到的代码片段将不再有效,returns 一个空缓冲区。
经过一些调试后,我注意到 pageOutput.base64
是空的,这意味着 Ghostscript 和 GraphicsMagick 可能没有正确安装(因为我在 Windows 中测试了没有依赖项的代码,结果是空的 pageOutput.base64
。
我通过输入 gs --version
再次检查了 Centos 中是否安装了 Ghostscript,它给出了 9.52
作为输出。
此外,我通过键入 gm version
检查了 GraphicsMagick,这给了我以下输出:
GraphicsMagick 1.3.35 2020-02-23 Q16 http://www.GraphicsMagick.org/
Copyright (C) 2002-2020 GraphicsMagick Group.
Additional copyrights and licenses apply to this software.
See http://www.GraphicsMagick.org/www/Copyright.html for details.
Feature Support:
Native Thread Safe yes
Large Files (> 32 bit) yes
Large Memory (> 32 bit) yes
BZIP no
DPS no
FlashPix no
FreeType no
Ghostscript (Library) no
JBIG no
JPEG-2000 no
JPEG no
Little CMS no
Loadable Modules no
Solaris mtmalloc no
Google perftools tcmalloc no
OpenMP yes (201511 "4.5")
PNG no
TIFF no
TRIO no
Solaris umem no
WebP no
WMF no
X11 no
XML yes
ZLIB yes
Host type: x86_64-pc-linux-gnu
Configured using the command:
./configure '--with-quantum-depth=16'
Final Build Parameters:
CC = gcc
CFLAGS = -fopenmp -g -O2 -Wall -pthread
CPPFLAGS = -I/usr/include/libxml2
CXX = g++
CXXFLAGS = -pthread
LDFLAGS =
LIBS = -llzma -lxml2 -lz -lm -lpthread
请注意,这两个依赖项是直接从源安装的。
所以我的问题是:
如何使 pdf2image
与部署在 linux 系统(特别是 CentOS Stream)上的 Node.js 一起工作?
是不是我在CentOS安装的依赖有问题?
谢谢。
我最终使用了 pdf-to-png-converter,它需要 0 个外部依赖项并且在 Windows 和 CentOS 中都能完美运行。
我是这样做的:
const pdfToPng = require('pdf-to-png-converter').pdfToPng;
convertPdfToImg = async (buffer) => {
const pngPage = await pdfToPng(buffer, {
disableFontFace: false,
useSystemFonts: false,
pagesToProcess: [1],
viewportScale: 2.0
});
return pngPage[0].content;
}
我希望我早点知道这个很棒的实用程序。
我正在使用 pdf2image
构建一个 Node.js 将 PDF 文件转换为 PNG 的应用程序。
正如 official repo 的自述文件所说,pdf2image
需要两个外部依赖项:Ghostscript 和 GraphicsMagick。两者都安装在我本地的Windows机器上
现在我可以使用以下代码将 PDF 文件缓冲区转换为 PNG 图像缓冲区:
const fromBuffer = require('pdf2pic').fromBuffer;
convertPdfToImg = async (pdfBuffer) => {
const pdf2picOptions = {
format: 'png',
width: 4000,
height: 5176,
density: 330,
savePath: './output',
};
const convert = fromBuffer(pdfBuffer, pdf2picOptions);
const pageOutput = await convert(1, true);
const pngBuffer = Buffer.from(pageOutput.base64, 'base64');
return pngBuffer;
};
一切正常,大家都很开心! (目前)
现在的问题是我需要在 Linux 环境 (CentOS Stream) 中将应用程序部署到生产环境,所以我在服务器上安装了依赖项,确保使用安装在我的服务器上的相同版本本地 Windows 机器(Ghostscript 9.52
和 GraphicsMagick 1.3.35 2020-02-23 Q16
)。但是,上面提到的代码片段将不再有效,returns 一个空缓冲区。
经过一些调试后,我注意到 pageOutput.base64
是空的,这意味着 Ghostscript 和 GraphicsMagick 可能没有正确安装(因为我在 Windows 中测试了没有依赖项的代码,结果是空的 pageOutput.base64
。
我通过输入 gs --version
再次检查了 Centos 中是否安装了 Ghostscript,它给出了 9.52
作为输出。
此外,我通过键入 gm version
检查了 GraphicsMagick,这给了我以下输出:
GraphicsMagick 1.3.35 2020-02-23 Q16 http://www.GraphicsMagick.org/
Copyright (C) 2002-2020 GraphicsMagick Group.
Additional copyrights and licenses apply to this software.
See http://www.GraphicsMagick.org/www/Copyright.html for details.
Feature Support:
Native Thread Safe yes
Large Files (> 32 bit) yes
Large Memory (> 32 bit) yes
BZIP no
DPS no
FlashPix no
FreeType no
Ghostscript (Library) no
JBIG no
JPEG-2000 no
JPEG no
Little CMS no
Loadable Modules no
Solaris mtmalloc no
Google perftools tcmalloc no
OpenMP yes (201511 "4.5")
PNG no
TIFF no
TRIO no
Solaris umem no
WebP no
WMF no
X11 no
XML yes
ZLIB yes
Host type: x86_64-pc-linux-gnu
Configured using the command:
./configure '--with-quantum-depth=16'
Final Build Parameters:
CC = gcc
CFLAGS = -fopenmp -g -O2 -Wall -pthread
CPPFLAGS = -I/usr/include/libxml2
CXX = g++
CXXFLAGS = -pthread
LDFLAGS =
LIBS = -llzma -lxml2 -lz -lm -lpthread
请注意,这两个依赖项是直接从源安装的。
所以我的问题是:
如何使 pdf2image
与部署在 linux 系统(特别是 CentOS Stream)上的 Node.js 一起工作?
是不是我在CentOS安装的依赖有问题?
谢谢。
我最终使用了 pdf-to-png-converter,它需要 0 个外部依赖项并且在 Windows 和 CentOS 中都能完美运行。
我是这样做的:
const pdfToPng = require('pdf-to-png-converter').pdfToPng;
convertPdfToImg = async (buffer) => {
const pngPage = await pdfToPng(buffer, {
disableFontFace: false,
useSystemFonts: false,
pagesToProcess: [1],
viewportScale: 2.0
});
return pngPage[0].content;
}
我希望我早点知道这个很棒的实用程序。