【问题标题】:how to access pdf dynamic from server [closed]如何从服务器访问pdf动态[关闭]
【发布时间】:2019-08-13 21:12:34
【问题描述】:

单击 orderid 我想打开该 orderid 发票 pdf。 如点击代码所示,我将 orderid 发送到 api,然后我从那里调用 invoice.getPDFFile(checkorderid)。 在 readfile 中,我在 settings.invoicesHome 中添加路径,在 invoiceName 中添加文件名,我正在获取缓冲区。

.html
<a (click)="openpdf(element.orderId)">{{element.orderId}}</a>

.ts 
openpdf(orderId){
this.httpClient.get(`/adminApi/getPDFFile?orderId=${orderId}`)
  .subscribe(res => {
  console.log(res);
  window.open(res);
  });
}

.js
__api.getPDFFile = function(req , res) {
   var checkorderid = req.query.orderId;
   console.log(checkorderid);
   invoice.getPDFFile(checkorderid)
 .then(function () {
 res.send(data);
   })
   .catch(function (err) {
      console.log();
   });
}

.js
exports.getPDFFile = function(orderId){
   let invoiceName = 'invoice_' + orderId + '.pdf';
   return new Promise((resolve,reject)=>{
      fs.readFile(path.join(settings.invoicesHome, invoiceName),(err, data)=>{
          if (err) {
              reject(err); 
          }
          else{
            resolve(data); 
          }
      });
  })
  .then((data)=>{
      console.log(data); 
  })
  .catch((err)=>{
      throw err; 
  })

我想在点击时打开 pdf 文件,但我正在获取如何获取 pdf 的缓冲区。

【问题讨论】:

标签: angular reactjs


【解决方案1】:

试试

openpdf(orderId){
this.httpClient.get(`/adminApi/getPDFFile?orderId=${orderId}`)
  .subscribe(res => {
     let file = new Blob([res], { type: 'application/pdf' });            
     var fileURL = URL.createObjectURL(file);
     window.open(fileURL);
  });
}

【讨论】:

  • 如何从 api getPDFFile 发送资源
  • _api.getPDFFile = function(req , res) { var checkorderid = req.query.orderId;让 invoiceName = 'invoice' + checkorderid + '.pdf'; return new Promise((resolve,reject)=>{ fs.readFile(path.join(settings.invoicesHome, invoiceName),(err, data)=>{if (err) { reject(err); }else{ resolve( data); } }); }) .then((data)=>{ }) .catch((err)=>{ throw err; })
  • 我正在获取字节数据,如何获取 pdf 格式的数据
【解决方案2】:

您需要处理文件或 blob,例如,如果服务器返回 Base 64:

static downloadFileBase64(base64File: string, extention: string, fileName: string) {
    const blob = this.generateBlobFromBase64File(base64File, extention, fileName);
    this.downloadFileFromBlob(blob, fileName);
}
private static downloadFileFromBlob(blob: Blob, fileName: string) {
    const url = window.URL.createObjectURL(blob);
    saveAs(blob, fileName);
}

文档:

URL.createObjectURL() 静态方法创建一个包含 表示参数中给定对象的 URL。 URL 生命周期 绑定到创建它的窗口中的文档。新的 object URL 表示指定的 File 对象或 Blob 对象。

*SaveAs: import { saveAs } from 'file-saver';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2017-01-10
    • 2014-09-03
    相关资源
    最近更新 更多