Javascript 使用jsZIP下载多个pdfmake文件

Javascript 使用jsZIP下载多个pdfmake文件,javascript,python,pdfmake,jszip,Javascript,Python,Pdfmake,Jszip,我在django项目中使用PDFmake生成pdf文件。我想使用单击一个按钮下载多个文件。这就是我计划使用jsZIP以zip格式下载所有文件的原因 function downloadAllPayslip(){ var employeeIdLst = getSelectedPayslipEmployeeIds(); $.ajax({ type: 'GET', url: '{% url "salary:ajax-download-al

我在django项目中使用PDFmake生成pdf文件。我想使用单击一个按钮下载多个文件。这就是我计划使用jsZIP以zip格式下载所有文件的原因

function downloadAllPayslip(){
      var employeeIdLst = getSelectedPayslipEmployeeIds();
      $.ajax({
        type: 'GET',
        url: '{% url "salary:ajax-download-all-payslip" %}',
        data: {
            'month': dateVar.getMonth()+1,  // number
            'year': dateVar.getFullYear(),
            'employee_id_lst': JSON.stringify(employeeIdLst),
        },
        dataType: 'json',
        success: function (data) {
          var lastDay = new Date(dateVar.getFullYear(), dateVar.getMonth() + 1, 0);
          var lastDayStr = lastDay.toString("MM/dd/yyyy");
          var lastDayStrSplit = lastDayStr.split("/");
          var monthName = months[parseInt(lastDayStrSplit[0]) - 1];
          var monthNameS = monthName.slice(0, 3);
          var year = lastDayStrSplit[2];
          var day = lastDayStrSplit[1];
          var zip = new JSZip();
          var bufferPDFList = [];
          var docDefinitionArr = [];
          var docDefinitionBufferArr = [];
          var content;
          var dataPDF;
          var nameArr = [];
          for (var i = 0; i < data.length; i++) {
            // Employee info
            var dailyStartTime = moment(data[i].daily_start_time, 'HH:mm:ss').format('h:mm A');
            var dailyExitTime = moment(data[i].daily_exit_time, 'HH:mm:ss').format('h:mm A');

            var employeeId = data[i].e_id;

            var employeeName = data[i].name;
            nameArr.push(employeeName);
            var employeeType = data[i].type;
            var employeeDesignation = data[i].designation;
            var employeeDepartment = data[i].department;
            var employeeJoinDate = data[i].join_date;
            var weekends = data[i].weekends;
            var shift = dailyStartTime + ' - ' + dailyExitTime;
            var breakDuration = data[i].break_duration;

            var leaveBalanceDict = data[i].leave_balance_dict;
            var leaveDataDict = []
            for (var leaveType in leaveBalanceDict) {
              var leaveDict = leaveBalanceDict[leaveType];
              var total = leaveDict.total;
              var taken = leaveDict.taken;
              var accrued = leaveDict.accrued;
              var remained = accrued - taken;
              leaveDataDict.push({
                'Leave Types': leaveType,
                'Leave Entitled(days)': total,
                'Leave Taken(days)': taken,
                'Leave Accrued(days)': accrued,
                'Leave Remained(days)': remained
              })
            }


            // Salary details
            if (data[i].is_overtime) {
              var overtimeAddition = data[i].overtime_addition + ' (+' + formatHHMM(data[i].overtime_hour) + ')';
            }
            else {
              var overtimeAddition = 'N/A';
            }

            var basicPay = data[i].basic_salary;
            var overtimePay = overtimeAddition;
            var lessWorkDeduction = data[i].less_work_deduction + "(" + formatHHMM(data[i].work_hour_deficit) + ")"
            var unpaidLeaveDeduction = data[i].unpaid_leave_deduction + "(" + data[i].unpaid_leave_count + "days)"
            var additionalPay = data[i].salary_addition;
            var totalPay = data[i].total_salary;
            var taxDeduction = data[i].tax_deduction+ "(" + data[i].percent_tax + "%)";
            var netSalary = data[i].net_salary;
            var comment = data[i].comment;

            var companyName = '{{ company_name }}'
            // Generate pdf
            var docDefinition = {
              footer: function(currentPage, pageCount) {
                return {
                  columns: [
                    {
                      text: currentPage.toString() + ' of ' + pageCount, alignment: 'center'
                    }
                  ]
                };
              },
              pageSize: 'A4',
              pageMargins: [40, 80, 40, 60],
              content: [
                { text: companyName, style: 'header', alignment: 'center' },
                { lineHeight: 2, text: 'Pay Slip', fontSize: 15, alignment: 'center' },
                { lineHeight: 2, text: 'Pay Period: 01 ' + monthNameS + ' ' + year + ' - ' + day + ' ' + monthNameS + ' ' + year , fontSize: 12, alignment: 'center', bold: true },
                { text: 'Employee Information', style: 'subheader'},
                {
                  columns: [
                    {
                      width: 120,
                      fontSize: 10,
                      text: 'Employee Name\n' +
                            'Employee ID\n' +
                            'Employee Type\n'+
                            'Designation'
                    },
                    {
                      width: 155,
                      fontSize: 10,
                      text: ':  ' + employeeName + '\n' +
                            ':  ' + employeeId + '\n' +
                            ':  ' + employeeType + '\n' +
                            ':  ' + employeeDesignation + '\n'
                    },
                    {
                      width: 120,
                      fontSize: 10,
                      text: 'Department\n' +
                            'Join Date\n' +
                            'Weekends\n' +
                            'Shift'
                    },
                    {
                      width: 155,
                      fontSize: 10,
                      text: ':  ' + employeeDepartment + '\n' +
                            ':  ' + employeeJoinDate + '\n' +
                            ':  ' + weekends + '\n' +
                            ':  ' + shift + '\n' +
                            '  (Break: '  + breakDuration + 'min)'
                    }
                  ]
                },
                { text: 'Leave Information', style: 'subheader'},
                {
                  columns: [
                    { width: 20, text: '' },
                    table(leaveDataDict, ['Leave Types', 'Leave Entitled(days)', 'Leave Taken(days)', 'Leave Accrued(days)', 'Leave Remained(days)']),
                  ]
                },

                { text: 'Salary Information', style: 'subheader'},
                {
                  style: 'table',
                  table: {
                    body: [
                      ['Basic', 'Overtime', 'Additional', 'Unpaid Leave Deduction', 'Less Work Deduction', 'Total Pay', 'Tax Deduction', 'Net pay'],
                      [basicPay, overtimePay, additionalPay, unpaidLeaveDeduction, lessWorkDeduction, totalPay, taxDeduction, netSalary]
                    ]
                  }
                },
              ],
              styles: {
                header: {
                  fontSize: 18,
                  bold: true,
                  margin: [0, 0, 0, 10]
                },
                subheader: {
                  fontSize: 15,
                  bold: true,
                  margin: [0, 10, 0, 5]
                },
                tableHeader: {
                  bold: true,
                  fontSize: 13,
                  color: 'black'
                },
                table: {
                  fontSize: 9,
                  margin: [0, 5, 0, 15]
                },
              },
            }
            pdfFilename = 'Payslip-' + employeeName + '-' + monthNameS + year + '.pdf'
              // pdfMake.createPdf(docDefinition).download('Payslip-' + employeeName + '-' + monthNameS + year, window);
              pdfMake.createPdf(docDefinition).getBase64(function(data) {
                zip.file(pdfFilename, data);
                // var content = zip.generate();
                // location.href="data:application/zip;base64,"+content;
              });
          }
          console.log(zip);
          var content = zip.generate();
          location.href="data:application/zip;base64,"+content;
          
        }
      });
    }
函数下载所有工资单(){
var employeeIdLst=getSelectedPayslipEmployeeIds();
$.ajax({
键入:“GET”,
url:“{%url”工资:ajax下载所有工资单“%}”,
数据:{
“月”:dateVar.getMonth()+1,//编号
“年”:dateVar.getFullYear(),
'employee_id_lst':JSON.stringify(employeeIdLst),
},
数据类型:“json”,
成功:功能(数据){
var lastDay=新日期(dateVar.getFullYear(),dateVar.getMonth()+1,0);
var lastDayStr=lastDay.toString(“MM/dd/yyyy”);
var lastDayStrSplit=lastDayStr.split(“/”);
var monthName=months[parseInt(lastDayStrSplit[0])-1];
var monthNameS=monthName.slice(0,3);
var年=lastDayStrSplit[2];
var day=lastDayStrSplit[1];
var zip=newjszip();
var bufferPDFList=[];
var docDefinitionArr=[];
var docDefinitionBufferArr=[];
var含量;
var-dataPDF;
var nameArr=[];
对于(变量i=0;i