如何在 back4app 解析服务器上处理 pdf 文件

Posted

技术标签:

【中文标题】如何在 back4app 解析服务器上处理 pdf 文件【英文标题】:How to work with pdf files on back4app parse server 【发布时间】:2021-10-28 09:17:17 【问题描述】:

我一直在探索 back4app 解析服务器。我正在寻找 pdf 文件的文档。我正在尝试从其云功能在 back4app 解析服务器上生成一些 pdf 文件。我没有看到任何文档。有人会指导我找到它吗,我们将不胜感激。 编辑: 那里的 pdf 创建者库要求输出路径,但在 back4app 中我们无法提前访问路径。我们创建传递数据的新文件,然后将其保存到对象。我们如何实现订单。

【问题讨论】:

Back4App 云代码本质上是一个 node.js 应用。您可以安装任何处理 pdf 创建的 npm 模块,并使用此模块从云代码创建您的 pdf。例如,我发现这个可能会有所帮助:npmjs.com/package/pdf-creator-node @DaviMacêdo 我们没有获得对文件容器存储的显式访问权限。当我们执行new parse.file(filename,encoding/data 时,它会返回一些响应,我们可以将这个创建的文件保存到我们想要的对象中。我不明白也找不到任何文件,例如图像、pdf、文本或其他文件,我们需要为新文件发送什么样的数据和编码/数据,以及将其保存到某个对象的编码/数据类型。 它会通过扩展名自动识别文件类型,但如果需要,您也可以传递 mime 类型。我不清楚你需要实现什么。您想在云代码上创建一个 pdf 文件吗?还是只存储 pdf 文件? @DaviMacêdo 是的,我想在云上创建一个 pdf 文件,但我不明白如何保存这个文件。首先我们需要使用新的 parse.file 创建一个文件,我应该传递什么参数并将它保存到对象我应该传递什么参数。非常感谢您的回复。 @bikashamit 您看过本指南吗? docs.parseplatform.org/js/guide/#files 【参考方案1】:

我知道如何完成它,谢谢@Davi macedo。但是有一些问题,我在本地(根)云代码创建了pdf,每次删除它都是令人羡慕的。这可能是更多请求的问题。 有人可以改进一点。会很好。 这是我的代码。 我已经使用 pdf-creator-node 来创建 pdf。

var pdf = require("pdf-creator-node");
var fs = require("fs")
var path = require('path')
const pdf2base64 = require('pdf-to-base64');
Parse.Cloud.define("pdf", async (req) => 
//creating pdf
// var html = fs.readFileSync("template.html", "utf8");
var html = fs.readFileSync(path.resolve(__dirname, 'template.html'), 
encoding: 'utf-8' );
var options = 
    format: "A3",
    orientation: "portrait",
    border: "10mm",
    header: 
        height: "45mm",
        contents: '<div style="text-align: center;">Author: Shyam Hajare</div>'
    ,
    footer: 
        height: "28mm",
        contents: 
            first: 'Cover page',
            2: 'Second page', // Any page number is working. 1-based index
            default: '<span style="color: #444;">page</span>/<span>pages</span>', // fallback value
            last: 'Last Page'
        
    
;
var users = [
    
        name: "Shyam",
        age: "26",
    ,
    
        name: "Navjot",
        age: "26",
    ,
    
        name: "Vitthal",
        age: "26",
    ,
];
var document = 
    html: html,
    data: 
        users: users,
    ,
    path: path.resolve(__dirname, './pdfs', 'my_file.pdf'),//using path is necessary
    type: "",
;
return pdf
    .create(document, options)
    .then((res) => 
       
        return pdf2base64(path.resolve(__dirname, "/usr/src/app/data/cloud      /pdfs/my_file.pdf")) //this path /usr/src/app/data/cloud/pdfs still mystery to me.
            .then(
                (response) => 
                   // console.log(response); //cGF0aC90by9maWxlLmpwZw==
                    const saveFiles = async () => 
                       //creating file
                        const parseFile = new Parse.File('pdfFile.pdf',base64:response);
                       // console.log(parseFile)
                       //saving file
                        const responseFile = await parseFile.save();

                        const Document = Parse.Object.extend('Document');
                        const document = new Document();
                        //saving it to object.
                        document.set('document', responseFile);
                        await document.save();
                    
                    saveFiles();
                
            )
            .catch(
                (error) => 
                    console.log(error); //Exepection error....
                
            )
        console.log(res);
    )
    .catch((error) => 
        console.error(error);
    );

);

【讨论】:

云根目录下的pdf文件每次都被覆盖就好了。我应该和它一起去吗?

以上是关于如何在 back4app 解析服务器上处理 pdf 文件的主要内容,如果未能解决你的问题,请参考以下文章

Back4app 解析服务器检索到的 ObjectId

back4app 解析,如何将用户对象 ID 应用到另一个类指针中

解析服务器设置

在android studio上设置bitnami Parse服务器的电子邮件验证

Back4App - 有限数量用户的解析类级别权限

如何否定 Parse 的 API (Back4App) 中的查询?具体来说,我如何让一切都没有关系?