当前位置: 首页 > 知识库问答 >
问题:

在ReactJS/Javascript中将Base64转换为PDF文件时遇到错误

卫才
2023-03-14

我正在努力将PDF显示为ReactJS中的附件。我已经设法将base64带到前端,但是在我尝试创建blob对象之后,它不起作用,尽管它转到Acrobat阅读器,但显示了错误。如有任何建议,请告知如何将base64正确转换为pdf。

我还上传了base64代码,这是我在pastebin登录控制台时得到的,https://pastebin.com/W4zEXyPy

注意:当我试图在https://base64.guru/它显示无效的字符串和字符(数据:application/pdf;),我尝试使用内容。切片(29) JVB (而不是来自数据:application/pdf;base64,JVBERi0xL……。)但得到相同的错误。链接至修复Base64 atbase64guru的pic

错误:未正确解码

>

  • NodeJS baackend代码响应API调用

         let token = req.cookies.access_token;
             if (token) {
               let Invoice_No_Actual = req.body.invoice_Name;
               res.set("Content-disposition", "attachment; filename=" + `${__dirname}\\` + `${Invoice_No_Actual}` + `.pdf`);
               res.contentType("application/pdf");
               res.send(`data:application/pdf;base64,${new Buffer.from(data).toString("base64")}`);
             }
           });
    

    前端代码API调用

     const headers = new Headers();
            headers.append("content-type", "application/json");
            headers.append("responseType", "application/pdf");
    
            const options = {
              method: "POST",
              headers,
              credentials: "include",
              body: JSON.stringify(invoice_Object),
              // body: "My HTML String",
            };
    
            const newRequest = new Request("http://localhost:5000/api/invoice-only", options);
    
            (async () => {
              const invoice_Call = await fetch(newRequest)
                .then((res) => {
                  return text1 = res.text();
                })
                .then((data) => {
                 generateFile(data, invoice_Name);
                });
            })();
          };
    

    generateFile()函数调用前端-在收到响应后

    
        let generateFile = (content, fileName) => {
        
            console.log("content", content); // here at console if i copy the code and use online tool(https://base64.guru/converter/decode/pdf) it shows the correct pdf
    
            let content1= content.slice(29);// content1 is correct base64 as if i use it online tool it correctly generate the PDF document
            const blob = new Blob([content1], { type: "application/pdf" });
            console.log(blob);
            const link = document.createElement("a");
            link.href = window.URL.createObjectURL(blob);
            link.download = fileName;
            link.click();
          };
    
    
    • 打开PDF文件链接时出错错误图片

  • 共有1个答案

    农存
    2023-03-14

    一个简单的控制台。日志(content.slice(29))可能会泄露您的错误。问题是content1变量包含一个以“VBE…”开头的字符串,而它必须以“JVBE…”开头。因此,您的错误是slice()函数丢弃了太多的字符。

     类似资料:
    • 问题内容: 现在,我通过此行获取File对象: 我需要在base 64中通过json发送此文件。如何将其转换为base64字符串? 问题答案: 现代ES6方式 (异步/等待) UPD: 如果您想捕捉错误

    • 我需要在Base64中通过json发送这个文件。我应该怎么做才能将它转换为base64字符串?

    • 我想把音频文件转换成base64只使用Javascript。 我们可以使用画布将图像转换为base64。但是我们如何转换音频文件。 任何帮助都将感激不尽。

    • 在我的应用程序中,我从AmazonS3: 错误为React的SyntheticBaseEvent: 我不知道我做错了什么。我知道你可以把pdf文件转换成Base64。任何帮助都将不胜感激。

    • 我有两个用PNG编码的,我需要用similor比较它们。JS 我认为最好的方法是使用将转换成文件对象。我该怎么做?

    • 为了将html转换为pdf,我使用了IText7的API convertToDocument,传递参数模板的ByteArrayInputStream、PDFDocument和ConvertProperties。 相关代码段: “PDF间接对象属于其他PDF文档。请将对象复制到当前PDF文档。” 转换属性的创建 在每次调用convertToDocument API之前创建对象 我是不是漏掉了什么?