我正在构建一个 Node.js 应用程序来将 PDF 转换为 PNG 并显示在用户页面上。
该应用程序将像这样工作:
- 用户上传 PDF 到服务器
- 服务器将 PDF 页面转换为单独的 PNG
- 在用户页面上显示 PNG
我发现了一个很棒的软件包,名为 Node ImageMagickhttps://github.com/rsms/node-imagemagick https://github.com/rsms/node-imagemagick但它并不完美。
有些事情就像-monitor
ImageMagick 的标志不起作用,但也不适用于普通的 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
。如果您打印scene number
,其转义序列为%s
, 像这样
convert input.pdf -format "%s\n" -write info: z%d.png
你会得到这个:
Output
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)