我正在构建一个Node.js应用程序,将PDF转换为PNG并显示在用户页面上。
该应用程序将如下工作:
- 用户将PDF上传到服务器
- 服务器将PDF页面转换为单个PNG
- 在用户页面上显示PNG
醇>
我找到了一个名为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');
});
然后读取该目录的内容,并向用户发送文件名和路径。
这是一个很好的解决方案吗?
有人可以解释我如何实现这个目标吗?
答案 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