Javascript 将PDF转换为PNG Node.JS

Javascript 将PDF转换为PNG Node.JS,javascript,node.js,pdf,imagemagick,Javascript,Node.js,Pdf,Imagemagick,我正在构建一个Node.js应用程序,将PDF转换为PNG并显示在用户页面上 该应用程序的工作原理如下: 用户将PDF上载到服务器 服务器将PDF页面转换为单个PNG 在用户页面上显示PNG 我发现了一个名为Node ImageMagick的很棒的软件包,但它并不完美 ImageMagick中的-monitor标志等功能不起作用,但在vanilla node.js上也不起作用: var exec = require('child_process').exec; exec('convert -m

我正在构建一个Node.js应用程序,将PDF转换为PNG并显示在用户页面上

该应用程序的工作原理如下:

  • 用户将PDF上载到服务器
  • 服务器将PDF页面转换为单个PNG
  • 在用户页面上显示PNG
  • 我发现了一个名为Node ImageMagick的很棒的软件包,但它并不完美

    ImageMagick中的
    -monitor
    标志等功能不起作用,但在vanilla node.js上也不起作用:

    var exec = require('child_process').exec;
    
    exec('convert -monitor myFile.pdf myFile.png', function(error, stdout, stderr) {
        console.log('converting is done');
    });
    
    我想要实现的是转换函数返回转换文件的名称,如:myFile-0.png,myFile-1.png

    我想要实现的解决方案是创建一个名为PDF的目录,并在其中转换PNG,如:

       exec('convert myFile.pdf myFile/myFile.png', function(error, stdout, stderr) {
            console.log('converting is done');
        });
    
    然后读取该目录的内容,并将文件名和路径发送给用户

    这是一个好的解决方案吗


    有人能告诉我如何实现这个目标吗?

    更新的答案

    我认为这一切都会在最后出来,因为Ghostscript实际上是代表IM做这项工作的。如果需要细粒度的控制,您可能需要检查PDF中有多少页,然后执行循环

    # Get number of pages in "a.pdf"
    pages=$(identify a.pdf | wc -l)
    
    # Alternative, faster way of getting number of pages - pdfinfo is part of Poppler package
    pages=$(pdfinfo a.pdf | grep "^Pages")
    
    for all pages 0 .. (pages-1)
       convert a.pdf[$page] page-${page}.png
    done
    
    原始答案

    我不确定我100%理解你想要什么,但我认为是这样的

    假设您有一个20页的PDF,名为
    input.PDF
    。如果打印转义序列为
    %s
    场景编号
    ,如下所示

    convert input.pdf -format "%s\n" -write info: z%d.png
    
    您将获得以下信息:

    输出

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    这些文件:

    ls z*
    z0.png  z10.png z12.png z14.png z16.png z18.png z2.png  z4.png  z6.png  z8.png
    z1.png  z11.png z13.png z15.png z17.png z19.png z3.png  z5.png  z7.png  z9.png
    

    是的,你的问题回答了我的一些问题,但是,当我生成这些数字时,我能实时得到这些数字吗?正如我现在看到的,这些数字在全部完成后被打印出来了?