将PDF转换为PNG Node.JS

时间:2015-10-02 08:57:06

标签: javascript node.js pdf imagemagick

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

该应用程序将如下工作:

  
      
  1. 用户将PDF上传到服务器
  2.   
  3. 服务器将PDF页面转换为单个PNG
  4.   
  5. 在用户页面上显示PNG
  6.   

我找到了一个名为Node ImageMagick https://github.com/rsms/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');
    });

然后读取该目录的内容,并向用户发送文件名和路径。

这是一个很好的解决方案吗?

有人可以解释我如何实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

更新了答案

我认为这一切都在最后出现,因为Ghostscript实际上代表IM做了工作。您可能需要检查PDF中有多少页面,然后在需要细粒度控制时进行循环。

Options -Indexes

原始答案

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

假设您有一个20页的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 。如果您打印input.pdf,其转义序列为scene number,就像这样

%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