在 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.52GraphicsMagick 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;
}

我希望我早点知道这个很棒的实用程序。