将firebase数据节点导出为pdf报告

时间:2017-11-17 18:35:54

标签: node.js firebase google-cloud-functions

使用Firebase作为后端的移动应用紧急消息系统有什么用途。当紧急事件结束时,我想在pdf文档中捕获消息日志。我找不到任何与Firebase一起使用的报表编辑器。这意味着我可能必须将其导出到php mysql。 Firebase php SDK看起来对这项任务来说太过分了。我一直在google搜索来自firebase的php,大多数回复都与使用Firebase php SDK有关。这是唯一可以实现的方式吗?

1 个答案:

答案 0 :(得分:3)

您可以在PDF Kit上使用...Cloud Functions)(它的所有nodeJS,那里没有PHP)。

在npmjs.com上,@firebase-opsgoogleapis@google-cloud有几个软件包。

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

您需要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连接它们),例如。通过HTTPS获取这些PDF文件(甚至在HTTPS请求时生成,用于外部触发生成)。对于本地测试,可以使用命令firebase serve,与firebase deploy相比节省了大量时间。

重点是,人们可以教云功能PDF文件的外观,创建时间和放置位置,作为微服务,除了渲染这些文件之外别无其他。在给出所有提供的线索的情况下,脚本编写一个脚本应该仍然在可接受的范围内。