首页 > 解决方案 > 在 Firebase Cloud Firestore 中创建文档时生成 PDF

问题描述

我正在开发一个基于 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');
    });

触发器被调用,但是我收到错误“错误:ENOENT:没有这样的文件或目录,stat'document.pdf'”

我已经尝试过 onCreate 函数是异步的并且没有。

任何帮助是极大的赞赏

标签: firebasegoogle-cloud-firestoregoogle-cloud-functionsfirebase-storage

解决方案


无法写入 /tmp 之外的 Cloud Functions 中的任何文件位置。如果您的代码需要编写文件,则应os.tmpdir()按照文档中的说明构建路径:

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

文件系统的其余部分是只读的并且可由函数访问。


推荐阅读