将pdf2image与Node.js和CentOS一起使用

sbtkgmzw  于 2022-11-07  发布在  Java
关注(0)|答案(1)|浏览(116)

我正在使用pdf2image构建一个Node.js应用程序,该应用程序将PDF文件转换为PNG。正如官方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)。然而,上面提到的代码片段不再工作,并返回一个空缓冲区。
经过一些调试后,我注意到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中的依赖项安装有什么问题吗?

  • 谢谢-谢谢
nkhmeac6

nkhmeac61#

我最终使用了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;
}

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

相关问题