首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向客户提供pdf?

如何向客户提供pdf?
EN

Stack Overflow用户
提问于 2019-02-10 11:50:07
回答 1查看 1.8K关注 0票数 0

按钮的onClick,我正在尝试从服务器获取一个生成的PDF (由Pdfmake库生成)文件,尽管我在chrome dev控制台的预览和响应部分获得了非常长的base64代码,比如--

JVBERi0xLjMKJf////8KNyAwIG9iago8PAovVHlwZSAvRXh0R1N0YXRlCi9jYSAxCj4+CmVuZG9iago4IDAgb2JqCjw8Ci9UeXBlIC9FeHRHU3RhdGUKL2NhIDEKL0NBIDEKPj4KZW5kb2JqCjExIDAgKL0luZm8gMTMgMCBSCi9JRCBbPGIzZjEyYjhkYWYwN2Q4ZWZkZjFjYTkzOWE3YTQ2NjZiPiA8YjNmMTJiOGRhZjA3ZDhlZmRmMWNhOTM5YTdhNDY2NmI+XQo+PgpzdGFydHhyZWYKMjA5Nj。............very龙..。

我希望在新的浏览器窗口选项卡上得到pdf,在手动输入这个以base64为前缀的data:application/pdf;base64,代码,然后显示它的pdf,但我需要它弹出在一个新的标签上,一旦onClick发生.

data:application/pdf;base64,JVBERi0xLjMKJf////8KNyAwIG9iago8PAovVHlwZSAvRXh0R1N0YXRlCi9jYSAxCj4+CmVuZG9iago4IDAgb2JqCjw8Ci9UeXBlIC9FeHRHU3RhdGUKL2NhIDEKL0NBIDEKPj4KZW5kb2JqCjExIDAgb2JqCjw8Ci9UeXBlIC9FeHRHU3RhdGUKL0NBIDEKPj4KZW5kb2JqgKI189+A10wPsfByPuXwnyXtcO17zDJBaRJTFEFLPpHqYmHEniQ7Wjpe/E/iXwbhHf8B6XIZX4gskibxEvuIM8G8E9zIfwk/kt/OfCYXCcuFT4YxqlOp11Tl1sVrSxGlqNa9pftQO1oo

请尽可能简单和详细地回答,我不知道流、缓冲区、base64、文件系统--一切都是如何工作的--以及如何处理,我是这个开发的新手。

客户端->

代码语言:javascript
复制
handleOrderInvoice(event) {
const orderid = event.currentTarget.id;
fetch(`/api/payment/order/${orderid}`, {
  method: "GET",
  headers: {
    Accept: "application/pdf",
    Authorization: localStorage.getItem("bearerToken")
  }
})
  .then(response => {

    //HOW to work with pdf response???

  })
  .catch(err => console.log(`Error in fetching this order. -- ${err}`));

服务器端(快递) -->

代码语言:javascript
复制
    router.get(
  "/order/:orderid",
  passport.authenticate("jwt", { session: false }),
  (req, res) => {
        //Create PDF Document
        const pdfDoc = pdfMake.createPdf(documentDefinition);
        pdfDoc.getBase64(data => {
          res.writeHead(200, {
            "Content-Type": "application/pdf",
            "content-Disposition": "inline; filename='invoice.pdf'"
          });
          const doc = Buffer.from(data.toString("utf-8"), "base64");
          res.end(doc);
        });
      })
      .catch(err =>
        console.log(`Error in fetching user order response. -- ${err}`)
      );
  }
);
EN

回答 1

Stack Overflow用户

发布于 2019-02-10 12:33:23

pdfs,图像通常不存储在base64中,因为这些文件的大小可能很大。相反,使用一个文件系统来存储,因为它更便宜(你不必来回转换)

假设您已经将pdf存储在文件系统中,则只需使用

代码语言:javascript
复制
response.sendFile(url-for-pdf);

您可以打开一个新窗口,在客户端显示pdf。

代码语言:javascript
复制
window.open('_link is here_', '_blank'); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54616062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档