这个firebase函数应该在/test/testfile.pdf中获取pdf,将其转换为灰色并将其保存在某处。我想在一个更复杂的过程中使用这个功能,但是exec(' convert')实际上并没有帮助我。
问题是' exec'命令一直失败。在shell中,您在此处看到的确切命令行正在运行:
convert -colorspace GRAY -density 300 test / testfile.pdf /tmp/out.pdf
日志中的错误是:
{ChildProcessError:命令失败:转换-colorspace GRAY -density 300 test / testfile.pdf /tmp/out.pdf转换:没有图像定义`/tmp/out.pdf' @ error / convert.c / ConvertImageCommand / 3210。 `convert-colorspace GRAY -density 300 test / testfile.pdf /tmp/out.pdf \`(在错误代码1中退出)回调(/user_code/node_modules/child-process-promise/lib/index.js:33: 27)在ChildProcess.exithandler(child_process.js:205:5)的emitTwo(events.js:106:13),在childProcess.emit(events.js:191:7)的maybeClose(internal / child_process.js:920: 16)在Process.ChildProcess._handle.onexit(internal / child_process.js:230:5)name:' ChildProcessError',code:1,childProcess:{ChildProcess:{[Function:ChildProcess] super_:[对象]},fork:[Function],_ forkChild:[Function],exec:[Function],execFile:[Function],spawn:[Function],spawnSync:[Function:spawnSync],execFileSync:[Function:execFileSync], execSync:[功能:execSync]},stdout:'',stderr:'转换:没有图像定义`/tmp/out.pdf\' @ error / convert.c / ConvertImageCommand / 3210。\ n' }
这是功能:
const functions = require('firebase-functions');
const rp = require('request-promise');
const request = require('request');
const baseURL = "https://www.google.com/cloudprint/"
const exec = require('child-process-promise').exec;
const mkdirp = require('mkdirp-promise');
const path = require('path');
const os = require('os');
const fs = require('fs');
exports.convertPDF = functions.https.onRequest((req, res) => {
const tempLocalThumbFile = path.join(os.tmpdir(), "out.pdf");
try {
let tempLocalFile = "test/testfile.pdf"
exec('convert -colorspace GRAY -density 300 test/testfile.pdf '+tempLocalThumbFile).then((a) => {
console.log('Conversion created at', tempLocalThumbFile);
}, function (err) {
console.log(err)
})
} catch(err) {
console.log(err)
}
})
我很困惑。如何使此转换在Firebase函数中工作?
答案 0 :(得分:0)
实际上问题是@Nivco所说的:Cloud Functions缺少ghostscript包。已有要求making ghostscript package available的功能请求。您可以转到该链接并单击开始图标,以便在有新闻时收到电子邮件通知。
还有另一个StackoverFlow thread,其中提到了一个解决方法,包括自己获取gs二进制文件。