pdfmake node js库中的Google Cloud函数本地目录图像读取错误

如何解决pdfmake node js库中的Google Cloud函数本地目录图像读取错误

我在谷歌云函数中使用 pdfmake nodejs 库来生成 pdf 文件。

我正在将图像下载到本地临时目录并在 pdfmake 中使用该图像,并且我已经部署了具有函数本身的本地图像,并且还在 pdf 中使用了该图像。

下载的图片位于“/tmp/image1.png”,本地图片位于“res/image2.png”

使用本地模拟器测试时,代码完全没有问题,但是当我尝试在云函数生产环境中运行时,出现以下错误,

无效图像:错误:未知图像格式。图像字典应包含 dataURL 条目(或 node.js 中的本地文件路径)

我已经部署了接近 14 个版本到云函数迭代图像格式、文件名、仅使用本地图像、仅使用 tmp 文件夹中下载的图像,但没有运气。

当相同的函数在本地模拟器上运行没有任何问题时,我相信这一定是与云函数读写权限有关。

跟随它的依赖,

"dependencies": {
    "electron": "^11.1.1","express": "^4.17.1","firebase-admin": "^9.2.0","firebase-functions": "^3.11.0","http": "0.0.1-security","moment": "^2.29.1","open": "^7.3.1","pdfmake": "^0.1.69"
  },

以下代码是从链接下载图片到临时文件夹,

var path = require('path');
import http from 'http'
import https from 'https'
import { createWriteStream,unlink } from 'fs'

const tempDir = os.tmpdir()
const tempFileName = path.join(tempDir,'Pic.png')
var url = "https://someimageurl"
var outFileName = path.join(tempDir,'out.pdf')
var tradeMark = "res/mark.png"
var imageSize = 75
var downloadPic = ''





const proto = !url.charAt(4).localeCompare('s') ? https : http;

function makePdf(){
    var fonts = {
        Roboto: {
            normal: 'fonts/Roboto-Regular.ttf',bold: 'fonts/Roboto-Medium.ttf',italics: 'fonts/Roboto-Italic.ttf',bolditalics: 'fonts/Roboto-MediumItalic.ttf'
        },Algerian: {
            normal: 'fonts/Algerian.ttf',bold: 'fonts/Algerian.ttf',bolditalics: 'fonts/Roboto-MediumItalic.ttf'
        }
    };
    
    var pdfMakePrinter = require('./node_modules/pdfmake/src/printer');

        var printer = new pdfMakePrinter(fonts);
        var docDefinition = {
            pageOrientation: 'landscape',pageMargins: [20,10,20,0],content: [
                {
                    columns: [
                        {
                            image: downloadPic,fit: [imageSize,imageSize],width: 'auto'
                        },[{
                            text: "name",style: { bold: true,fontSize: 30,font: 'Algerian',color: 'green' },alignment: 'center',width: '*',},{
                            text: "sub Header",fontSize: 20,font: 'Roboto',margin: [0,5,10]
                        },],{
                            image: tradeMark,fit: [imageSize - 25,imageSize - 25],width: 'auto',12,0]
                        },columnGap: 20
                }
            ]
        };
        
        var pdfDoc = printer.createPdfKitDocument(docDefinition);
        pdfDoc.pipe(createWriteStream(outFileName));
        pdfDoc.end();
}

function downloadAndPrepareReport(url,filePath) {

    console.log("Going to download image file: url: " + url + " filePath: " + filePath)

    const proto = !url.charAt(4).localeCompare('s') ? https : http;

    return new Promise((resolve,reject) => {
        const file = createWriteStream(filePath);
        let fileInfo = null;

        const request = proto.get(url,response => {
            if (response.statusCode !== 200) {
                console.log("Image Download failed")
                reject(new Error(`Failed to get '${url}' (${response.statusCode})`));
                return;
            }

            fileInfo = {
                mime: response.headers['content-type'],size: parseInt(response.headers['content-length'],10),};

            response.pipe(file);
        });

        file.on('finish',() => {
                console.log("Image Download Complete")
                downloadPic = filePath
            
                makePdf()
                resolve("ok done")
            
        }

        

    );

        request.on('error',err => {
            unlink(filePath,() => reject(err));
        });

        file.on('error',() => reject(err));
        });

        request.end();
    });
}

downloadAndPrepareReport(url,tempFileName)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res