gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:15:29 27 4
gpt4 key购买 nike

有一个使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com