将PDF转换为PNG Node.JS

4
我正在构建一个Node.js应用程序,用于将PDF转换为PNG并在用户页面上显示。
该应用程序的工作方式如下:
1. 用户将PDF上传到服务器 2. 服务器将PDF页面转换为单独的PNG 3. 在用户页面上显示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');
    });

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

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

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

1个回答

3
更新的回答:
我认为最终都会得到结果,因为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

原始答案:

原始答案

不确定我是否完全理解您想要的内容,但我认为它类似于以下内容...

假设您有一个名为input.pdf的20页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

是的,你的问题回答了我的一些问题,但是我能实时获取这些数字吗?就像我生成它们一样,现在看到这些数字都是在全部完成后才打印出来的。 - Hiero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接