将PDF转换为PNG Node.JS

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

该应用程序将像这样工作:

  1. 用户将PDF上传到服务器
  2. 服务器将PDF页面转换为单个的PNG
  3. 在用户页面上显示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。

我想要实现的解决scheme是创build一个名称为PDF的目录,并将PNG转换为:

  exec('convert myFile.pdf myFile/myFile.png', function(error, stdout, stderr) { console.log('converting is done'); }); 

然后阅读该目录的内容,并向用户发送文件和path的名称。

这是一个很好的解决scheme?

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

更新的答案

我认为这一切都在最后出来,因为Ghostscript实际上正在代表IM进行工作。 您可能需要检查您的PDF中有多less页,然后如果您想要精细控制,请执行循环。

 # 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 。 如果打印转scene number顺序为%sscene number ,就像这样

 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