如何使用 node-imagemagick 从缓冲区转换 pdf
How to convert pdf from buffer using node-imagemagick
我想使用 imagemagick 从我从 URL 包含 pdf 的缓冲区中转换 pdf 文件(不是 pdf 文件,所以我不必先保存 pdf 和 运行 imagemagick ).我使用 node-imagemagick 并且在文档中只是显示 convert() 方法和如下文件路径:(kittens.jpg)
im.convert(['kittens.jpg', '-resize', '25x120', 'kittens-small.jpg'],
function(err, stdout){
if (err) throw err;
console.log('stdout:', stdout);
});
但是如果我想使用缓冲区,我该怎么做呢?这是我的代码
request.get({ url: 'url to pdf', encoding: null }, (err, resp, body) => {
im.convert([body, '-resize', '25x120', 'kittens-small.jpg'],
function(err, stdout){
if (err) throw err;
console.log('stdout:', stdout);
});
})
你可以查看node-imagemagik的源码:Link to code.
node-imagemagik 是 convert
工具的包装器。
转换函数定义如下
exports.convert = function(args, timeout, callback) {
var procopt = {encoding: 'binary'};
if (typeof timeout === 'function') {
callback = timeout;
timeout = 0;
} else if (typeof timeout !== 'number') {
timeout = 0;
}
if (timeout && (timeout = parseInt(timeout)) > 0 && !isNaN(timeout))
procopt.timeout = timeout;
return exec2(exports.convert.path, args, procopt, callback);
}
exports.convert.path = 'convert';
它假定您提供与命令行中相同的参数,即源图像路径。但是,convert
支持来自 stdin 的输入,这就是您可以将 pdf 数据提供给进程的方式。
在源代码中,有一个有用的例子。调整大小函数的定义,它接受二进制数据并使用适当的参数将其输入转换函数。
var resizeCall = function(t, callback) {
var proc = exports.convert(t.args, t.opt.timeout, callback);
if (t.opt.srcPath.match(/-$/)) {
if ('string' === typeof t.opt.srcData) {
proc.stdin.setEncoding('binary');
proc.stdin.write(t.opt.srcData, 'binary');
proc.stdin.end();
} else {
proc.stdin.end(t.opt.srcData);
}
}
return proc;
}
exports.resize = function(options, callback) {
var t = exports.resizeArgs(options);
return resizeCall(t, callback)
}
对 convert
的调用是用“-”替换输入文件名。终端的等效用法类似于:
my_process_that_outputs_pdf | convert - <convertion options here...> my_output.png
我想使用 imagemagick 从我从 URL 包含 pdf 的缓冲区中转换 pdf 文件(不是 pdf 文件,所以我不必先保存 pdf 和 运行 imagemagick ).我使用 node-imagemagick 并且在文档中只是显示 convert() 方法和如下文件路径:(kittens.jpg)
im.convert(['kittens.jpg', '-resize', '25x120', 'kittens-small.jpg'],
function(err, stdout){
if (err) throw err;
console.log('stdout:', stdout);
});
但是如果我想使用缓冲区,我该怎么做呢?这是我的代码
request.get({ url: 'url to pdf', encoding: null }, (err, resp, body) => {
im.convert([body, '-resize', '25x120', 'kittens-small.jpg'],
function(err, stdout){
if (err) throw err;
console.log('stdout:', stdout);
});
})
你可以查看node-imagemagik的源码:Link to code.
node-imagemagik 是 convert
工具的包装器。
转换函数定义如下
exports.convert = function(args, timeout, callback) {
var procopt = {encoding: 'binary'};
if (typeof timeout === 'function') {
callback = timeout;
timeout = 0;
} else if (typeof timeout !== 'number') {
timeout = 0;
}
if (timeout && (timeout = parseInt(timeout)) > 0 && !isNaN(timeout))
procopt.timeout = timeout;
return exec2(exports.convert.path, args, procopt, callback);
}
exports.convert.path = 'convert';
它假定您提供与命令行中相同的参数,即源图像路径。但是,convert
支持来自 stdin 的输入,这就是您可以将 pdf 数据提供给进程的方式。
在源代码中,有一个有用的例子。调整大小函数的定义,它接受二进制数据并使用适当的参数将其输入转换函数。
var resizeCall = function(t, callback) {
var proc = exports.convert(t.args, t.opt.timeout, callback);
if (t.opt.srcPath.match(/-$/)) {
if ('string' === typeof t.opt.srcData) {
proc.stdin.setEncoding('binary');
proc.stdin.write(t.opt.srcData, 'binary');
proc.stdin.end();
} else {
proc.stdin.end(t.opt.srcData);
}
}
return proc;
}
exports.resize = function(options, callback) {
var t = exports.resizeArgs(options);
return resizeCall(t, callback)
}
对 convert
的调用是用“-”替换输入文件名。终端的等效用法类似于:
my_process_that_outputs_pdf | convert - <convertion options here...> my_output.png