【问题标题】:Download as PDF from a JSON post response data in angular 4/5从角度 4/5 的 JSON 后响应数据下载为 PDF
【发布时间】:2018-04-24 16:36:57
【问题描述】:

最新代码::: 转换() {

  const doc = new jsPDF();
  // tslint:disable-next-line:max-line-length
  const col = ['DischargeDate', 'Case Number', 'Patient Name', 'Hospital Name',  'Payor', 'Total Doctor Fee', 'To be Collected'];
  const rows = [];

/* The following array of object as response from the API req  */

const itemNew = this.finalArList;

itemNew.forEach(element => {
  // tslint:disable-next-line:max-line-length
  const temp = [element.dischargeDate, element.caseNo, element.patientName, element.instName, element.payor, element.totalDrFee, element.drFeeToCollect];
  rows.push(temp);

});

  doc.autoTable(col, rows);
  doc.save('Test.pdf');
}

以上是返回对象数组的 api url,在视图中我正在打印这些数据。现在如何将此列表下载为 pdf 格式。

从 api 调用返回的 json 数据看起来像这样。如何实现此 json 数据的 PDF 下载。

好的,这是我尝试过的代码。

public downloadPdf() {
      return this.http
        .get('http://161.202.31.51:8185/sgdocsrv/ar/getARList', {
          responseType: ResponseContentType.Blob
        })
        .map(res => {
          return {
            filename: 'filename.pdf',
            data: res.blob()
          };
        })
        .subscribe(res => {
            console.log('start download:', res);
            const url = window.URL.createObjectURL(res.data);
            const a = document.createElement('a');
            document.body.appendChild(a);
            a.setAttribute('style', 'display: none');
            a.href = url;
            a.download = res.filename;
            a.click();
            window.URL.revokeObjectURL(url);
            a.remove(); // remove the element
          }, error => {
            console.log('download error:', JSON.stringify(error));
          }, () => {
            console.log('Completed file download.')
          });
    }

但它不起作用。这里的 return this.http 有一个 get 调用,但我的 api 有一个 post 方法。我不确定要尝试的确切逻辑是什么。

【问题讨论】:

  • 由于后端只是为您提供 JSON 数据,我认为您能做的最好的事情就是让用户将页面打印为 pdf。想想你看到“查看可打印版本”链接的所有地方,比如机票。
  • 它被否决了,因为它的质量不足以提供一个好的答案。改进问题的方法可能包括您已经尝试过的事情、示例代码、您正在使用的文档等。编辑:像这样删除您的评论是不礼貌的,现在我的评论脱离了上下文。 OP 最初问“为什么我的问题被否决了?”
  • 好的,我已经添加了我尝试过的代码你现在可以删除否决票
  • 我没有投反对票。
  • jsPDF 之类的内容可能适合您的需求。

标签: angular pdf download


【解决方案1】:

您可以使用 jspdf 和 jspdf-autotable 下载为 pdf。这是示例: 但是您需要根据您的要求修改代码。您需要在 rowCountModNew 中分配您的 JSON 数组。希望对你有帮助

在 HTML 中:

<a (click)="convert()">Generate PDF</a>

在 TS 文件中:

import * as jsPDF from 'jspdf';
import 'jspdf-autotable';

并使用以下功能:

convert() {

    var doc = new jsPDF();
    var col = ["Id", "TypeID","Accnt","Amnt","Start","End","Contrapartida"];
    var rows = [];

var rowCountModNew = [
["1721079361", "0001", "2100074911", "200", "22112017", "23112017", "51696"],
["1721079362", "0002", "2100074912", "300", "22112017", "23112017", "51691"],
["1721079363", "0003", "2100074913", "400", "22112017", "23112017", "51692"],
["1721079364", "0004", "2100074914", "500", "22112017", "23112017", "51693"]
]


rowCountModNew.forEach(element => {
      rows.push(element);

    });


    doc.autoTable(col, rows);
    doc.save('Test.pdf');
  }

考虑一个对象数组作为响应,修改后的代码将是:

    convert() {

        var doc = new jsPDF();
        var col = ["Details", "Values"];
        var rows = [];

  /* The following array of object as response from the API req  */

     var itemNew = [    
      { id: 'Case Number', name : '101111111' },
      { id: 'Patient Name', name : 'UAT DR' },
      { id: 'Hospital Name', name: 'Dr Abcd' }    
    ]


   itemNew.forEach(element => {      
        var temp = [element.id,element.name];
        rows.push(temp);

    });        

        doc.autoTable(col, rows);
        doc.save('Test.pdf');
      }

pdf 看起来像这样

【讨论】:

  • 感谢您的回复。您的解决方案效果很好!在这里,您有硬编码的行和列数据。但我的问题是从 api Request url :(161.202.31.51:8185/sgdocsrv/ar/getARList) 检索数据,响应将是一个对象数组。我如何做到这一点?
  • 好的..所以我相信你从上面的 URL 中得到了一个对象数组的响应..你可以在这里放一个示例响应,以便于回答。
  • 但是我用示例数组对象更新了代码。您可以修改的密钥名称可能不同。希望对你有帮助
  • 对这个问题有任何想法吗? html2canvas 插件stackoverflow.com/questions/50018124/…
  • 我已经实现了这个方法。我在我的 PDF 中获取数据列表。但就我而言,列数更多。所以行元素形成一个省略号并且不完全显示。请帮忙 !!我附上了屏幕截图以供参考。我们有什么方法可以看到数据而不被隐藏?
猜你喜欢
  • 2018-04-20
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
相关资源
最近更新 更多