在Firebase Cloud Firestore中创建文档时生成PDF

在Firebase Cloud Firestore中创建文档时生成PDF,firebase,google-cloud-firestore,google-cloud-functions,firebase-storage,Firebase,Google Cloud Firestore,Google Cloud Functions,Firebase Storage,我正在开发一个基于web表单创建PDF的应用程序 我目前正试图使用pdfmake根据firestore文档创建触发器生成PDF import * as functions from 'firebase-functions'; const admin = require('firebase-admin); admin.initializeApp(); const PdfPrinter = require('pdfmake'); const fs = require('fs'); export c

我正在开发一个基于web表单创建PDF的应用程序

我目前正试图使用pdfmake根据firestore文档创建触发器生成PDF

import * as functions from 'firebase-functions';
const admin = require('firebase-admin);
admin.initializeApp();
const PdfPrinter = require('pdfmake');
const fs = require('fs');

export const createPDF = functions.firestore
    .document('pdfs/{pdf}')
    .onCreate(async (snap, context) => {

        var pdfName  = context.params.pdf;
        var printer = new PdfPrinter();

        var docDefinition = {
        // Pdf Definitions
        };

        var options = {
        // Pdf Options
        };

        var pdfDoc = printer.createPdfKitDocument(docDefinition, options);
        pdfDoc.pipe(fs.createWriteStream('tempDoc.pdf'));
        await pdfDoc.end();


        // Upload to Firebase Storage
        const bucket = admin.storage().bucket('myproject.appspot.com');
        bucket.upload('tempDoc.pdf', {
            destination: pdfName + '.pdf',
        });

        return fs.unlinkSync('document.pdf');
    });

触发器被调用,但是我得到错误“error:enoint:no-this-file或directory,stat'document.pdf'”

我已经尝试过将onCreate函数设置为异步,而不使用


非常感谢您的帮助

在/tmp之外的云函数中,无法写入任何文件位置。如果您的代码需要写入文件,它应该根据
os.tmpdir()
构建路径,如中所述:

文件系统中唯一可写的部分是/tmp目录,它 可以使用在函数实例中存储临时文件。这是一个 本地磁盘装入点,称为“tmpfs”卷,其中写入数据 该卷存储在内存中。请注意,它将消耗内存 为函数配置的资源

文件系统的其余部分是只读的,用户可以访问 功能


如果我将tempDoc.pdf更改为path.join(os.tmpdir(),'tempDoc.pdf'),我仍然会收到错误“error:enoint:没有这样的文件或目录,请打开“/tmp/document.pdf”。我添加了操作系统和路径的导入。您还忽略了异步API返回的所有承诺/回调。您需要返回一个在所有异步工作完成时解析的承诺。