节点中的PDF到图像
PDF to Image in node
我正在使用node-express,需要在服务器端将pdf转成图片
Pdf-poppler 在 linux 中不工作,而 pdf-image 恰好也不工作。
我们如何在后端将 pdf 转换并保存为图像的任何替代方法。
也许你可以试试这个兄弟:
- 创建上传文件夹并复制要转换为 png 的 sample.pdf 文件。因为在这里我只会向您展示如何将 pdf 转换为 png 我将 pdf 用作静态路径您需要通过 REST API.
上传该 pdf 文件
- 现在打开您的 app.js 或 index.js 文件并粘贴下面的代码,我们使用 pdf2pic 包将 pdf 页面转换为 png 图像。
或者您访问这个 link:
https://codinghub.medium.com/how-to-convert-pdf-file-pages-to-png-images-node-js-dccec010bf13
Pdf-poppler 使用 poppler 项目提供的 pdftocairo
命令。由于poppler确实支持Linux,你可以自行安装
例如,在 ubuntu
apt-get install poppler-utils
然后使用 Pdf-poppler 中的以下代码调用 pdftocairo 命令。
const path = require('path');
const {execFile} = require('child_process');
const pdftocairoBin = '/usr/bin/pdftocairo';
const FORMATS = ['png', 'jpeg', 'tiff', 'pdf', 'ps', 'eps', 'svg'];
let defaultOptions = {
format: 'jpeg',
scale: 1024,
out_dir: null,
out_prefix: null,
page: null
};
function pdf2image(file, opts) {
return new Promise((resolve, reject) => {
opts.format = FORMATS.includes(opts.format) ? opts.format : defaultOptions.format;
opts.scale = opts.scale || defaultOptions.scale;
opts.out_dir = opts.out_dir || defaultOptions.out_dir;
opts.out_prefix = opts.out_prefix || path.dirname(file);
opts.out_prefix = opts.out_prefix || path.basename(file, path.extname(file));
opts.page = opts.page || defaultOptions.page;
let args = [];
args.push([`-${opts.format}`]);
if (opts.page) {
args.push(['-f']);
args.push([parseInt(opts.page)]);
args.push(['-l']);
args.push([parseInt(opts.page)]);
}
if (opts.scale) {
args.push(['-scale-to']);
args.push([parseInt(opts.scale)]);
}
args.push(`${file}`);
args.push(`${path.join(opts.out_dir, opts.out_prefix)}`);
execFile(pdftocairoBin, args, {
encoding: 'utf8',
maxBuffer: 5000*1024,
shell: false
}, (err, stdout, stderr) => {
if (err) {
reject(err);
}
else {
resolve(stdout);
}
});
});
};
pdf2image函数的使用
pdf2image('./input.pdf', {out_dir:'./', out_prefix:'ppp'});
我正在使用node-express,需要在服务器端将pdf转成图片
Pdf-poppler 在 linux 中不工作,而 pdf-image 恰好也不工作。
我们如何在后端将 pdf 转换并保存为图像的任何替代方法。
也许你可以试试这个兄弟:
- 创建上传文件夹并复制要转换为 png 的 sample.pdf 文件。因为在这里我只会向您展示如何将 pdf 转换为 png 我将 pdf 用作静态路径您需要通过 REST API. 上传该 pdf 文件
- 现在打开您的 app.js 或 index.js 文件并粘贴下面的代码,我们使用 pdf2pic 包将 pdf 页面转换为 png 图像。
或者您访问这个 link: https://codinghub.medium.com/how-to-convert-pdf-file-pages-to-png-images-node-js-dccec010bf13
Pdf-poppler 使用 poppler 项目提供的 pdftocairo
命令。由于poppler确实支持Linux,你可以自行安装
例如,在 ubuntu
apt-get install poppler-utils
然后使用 Pdf-poppler 中的以下代码调用 pdftocairo 命令。
const path = require('path');
const {execFile} = require('child_process');
const pdftocairoBin = '/usr/bin/pdftocairo';
const FORMATS = ['png', 'jpeg', 'tiff', 'pdf', 'ps', 'eps', 'svg'];
let defaultOptions = {
format: 'jpeg',
scale: 1024,
out_dir: null,
out_prefix: null,
page: null
};
function pdf2image(file, opts) {
return new Promise((resolve, reject) => {
opts.format = FORMATS.includes(opts.format) ? opts.format : defaultOptions.format;
opts.scale = opts.scale || defaultOptions.scale;
opts.out_dir = opts.out_dir || defaultOptions.out_dir;
opts.out_prefix = opts.out_prefix || path.dirname(file);
opts.out_prefix = opts.out_prefix || path.basename(file, path.extname(file));
opts.page = opts.page || defaultOptions.page;
let args = [];
args.push([`-${opts.format}`]);
if (opts.page) {
args.push(['-f']);
args.push([parseInt(opts.page)]);
args.push(['-l']);
args.push([parseInt(opts.page)]);
}
if (opts.scale) {
args.push(['-scale-to']);
args.push([parseInt(opts.scale)]);
}
args.push(`${file}`);
args.push(`${path.join(opts.out_dir, opts.out_prefix)}`);
execFile(pdftocairoBin, args, {
encoding: 'utf8',
maxBuffer: 5000*1024,
shell: false
}, (err, stdout, stderr) => {
if (err) {
reject(err);
}
else {
resolve(stdout);
}
});
});
};
pdf2image函数的使用
pdf2image('./input.pdf', {out_dir:'./', out_prefix:'ppp'});