node.js - 将 firebase 数据 Node 导出为 pdf 报告

标签 node.js firebase google-cloud-functions

有一个使用 Firebase 作为后端的移动应用程序紧急消息系统。当紧急事件结束时,我想将消息日志捕获到 pdf 文档中。我一直没能找到任何与 Firebase 一起工作的报告编辑器。这意味着我可能必须将其导出到 php mysql。 Firebase php SDK 看起来对这项任务来说太过分了。我一直在谷歌搜索 php 从 firebase 获取,大多数响应都与使用 Firebase php SDK 有关。这是完成它的唯一方法吗?

最佳答案

你可以使用 PDF Kit ( ... ) 在 Cloud Functions 上(全是 nodeJS,那里没有可用的 PHP)。

在 npmjs.com 上有几个包 @firebase-ops , googleapis@google-cloud .

为了从 Firebase 读取并写入 Storage BucketData Store ;该示例脚本仍然需要数据库引用和存储目标,以呈现 PDF 内容(最终来自模板)并将其放在它所属的位置。另见 firebase / functions-samples (尤其是定义依赖项的 package.json)。 npm install -g firebase-tools 安装部署所需的工具;还需要 installed为了在本地为人所知(非常类似于 Composer - 而远程这些在部署过程中为人所知)。

您需要 a) Firebase Event onUpdate () 作为触发器,b) 检查返回的 DeltaSnapshotendTime对于一个值和 c) 然后渲染并存储 PDF 文档。代码可能会有所不同,只是为了提供在给定环境中如何工作的粗略概念:

'use strict';

const admin = require('firebase-admin');
const functions = require('firebase-functions');
const PDFDocument = require('pdfkit');
const gcs = require('@google-cloud/storage')();
const bucket = gcs.bucket( 'some-bucket' );
const fs = require('fs');

// TODO: obtain a handle to the delta snapshot

// TODO: render the report
var pdf = new PDFDocument({
    size: 'A4', 
    info: {Title: 'Tile of File', Author: 'Author'}
});
pdf.text('Emergency Incident Report');

pdf.pipe(
    // TODO: figure out how / where to store the file
    fs.createWriteStream( './path/to/file.pdf' )
).on('finish', function () {
    console.log('PDF closed');
});

pdf.end();

在这种情况下,外部运行的 PHP 代码不会在服务器端运行。它的问题是,外部服务器不会提供任何实时触发器,因此文件不会在时间戳更新时立即出现(正如人们期望从实时数据库中看到的那样)。还可以添加 external web-hooks (或将它们与 PHP 接口(interface)),例如。通过 HTTPS 获取这些 PDF 文件(或者甚至根据 HTTPS 请求生成,用于外部触发生成)。对于本地测试,可以使用命令 firebase serve,与 firebase deploy 相比可以节省很多时间。

重点是,人们可以教导 Cloud Function PDF 文件应该如何看起来相似、何时创建它们以及将它们放在哪里,作为微服务,它除了呈现这些文件外什么都不做。鉴于提供的所有线索,编写一个脚本应该仍在可接受的范围内。

关于node.js - 将 firebase 数据 Node 导出为 pdf 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357164/

相关文章:

node.js - 不能在模块外使用 import 语句,TypeScript NodeJS Firebase Functions 项目

node.js - 使用 Azure Web 应用程序部署的 Express Angular 5 应用程序不允许使用 405 方法

java - 我在将 Firebase 实时数据库中的数据检索到字符串变量中时遇到问题

python-3.x - 如何使用谷歌云函数来安排与 python 3.6 一起使用的 python 脚本?

java - Firebase数据库数据检索getter错误

android - 如何在 firebase 中创建基于角色的访问控制或自定义声明

firebase - 如何使用Firebase Emulator设置Firebase Firestore和云功能测试套件以进行JS开发

node.js - 使用 webpack 输出一个可执行文件

MySql从两个表中选择全部导致大量重复

javascript - 无法在范围之外访问函数结果