zhangweicheng 7 lat temu
rodzic
commit
8b5dbc8cbe

+ 23 - 0
modules/reports/controllers/rpt_controller.js

@@ -13,6 +13,7 @@ let demoTemplateFacade = require('../facade/rpt_tpl_data_demo_facade');
 let JpcEx = require('../rpt_component/jpc_ex');
 let rptUtil = require("../util/rpt_util");
 let rpt_xl_util = require('../util/rpt_excel_util');
+let rpt_pdf_util = require('../util/rpt_pdf_util');
 let fs = require('fs');
 let strUtil = require('../../../public/stringUtil');
 
@@ -120,5 +121,27 @@ module.exports = {
                 });
             });
         })
+    },
+    getPDF:function (req, res) {
+        let rpt_id = req.params.id,
+            pageSize = req.params.size,
+            rptName = req.params.rptName;
+
+        getAllPagesCommonOrg(req, res, rpt_id, pageSize, function(pageRst){
+            rpt_pdf_util.export_pdf_file(pageRst, pageSize, rptName,function (newName) {
+                res.setHeader('Content-Type', 'application/vnd.openxmlformats');
+                res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".pdf");
+
+                let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.pdf');
+                filestream.on('data', function(chunk) {
+                    res.write(chunk);
+                });
+                filestream.on('end', function() {
+                    res.end();
+                });
+            })
+
+        })
+
     }
 };

+ 1 - 0
modules/reports/routes/report_router.js

@@ -19,5 +19,6 @@ module.exports =function (app) {
     });
     rptRouter.post('/getReport', reportController.getReportAllPages);
     rptRouter.get('/getExcel/:id/:size/:rptName/:isOneSheet', reportController.getExcel);
+        rptRouter.get('/getPDF/:id/:size/:rptName', reportController.getPDF);//2/A4/07-1表
     app.use("/report_api", rptRouter);
 }

+ 230 - 0
modules/reports/util/canvas_util.js

@@ -0,0 +1,230 @@
+/**
+ * Created by chen on 2017/7/27.
+ */
+let can = require('canvas');
+let canvas = new can(1200, 900,'pdf'), fs = require('fs');
+let reportO = require('./reportOj');
+//,ctx = canvas.getContext('2d')
+/*var y = 80, x = 50;
+ctx.font = '22px Helvetica';
+ctx.fillText('node-canvas pdf', x, y);
+ctx.font = '10px Arial';
+ctx.fillText('Just a quick example of PDFs with node-canvas lonso', x, y += 20);
+ctx.globalAlpha = .5;
+ctx.fillRect(x, y += 20, 10, 10);
+ctx.fillRect(x += 20, y, 10, 10);
+ctx.fillRect(x += 20, y, 10, 10);*/
+//fs.writeFile('out.pdf', canvas.toBuffer());
+
+
+
+let JpcCanvasOutput = {
+    offsetX: 10,
+    offsetY: 10,
+    cleanCanvas: function (canvas) {
+        var ctx = canvas.getContext("2d");
+        ctx.save();
+        ctx.fillStyle="white";
+        ctx.clearRect(0,0, canvas.width, canvas.height);
+        ctx.restore();
+    },
+    drawToCanvas : function(pageObj, canvas, pageIdx) {
+        var me = this;
+        var ctx = canvas.getContext("2d");
+
+        function private_setupAreaH(area, type, fontAngle, dftFontHeight, outputPoint) {
+            var lType = type;
+            if (type != "left" && type != "right" && type != "center") lType = "left";
+            switch (lType) {
+                case "left":
+                    if (fontAngle == JV.VERTICAL_ANGLE) {
+                        outputPoint[1] = 1 * area[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+                    } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
+                        outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+                    } else outputPoint[0] = 1 * area[JV.IDX_LEFT] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+                    ctx.textAlign="start";
+                    break;
+                case "right":
+                    if (fontAngle == JV.VERTICAL_ANGLE) {
+                        outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
+                    } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
+                        outputPoint[1] = 1 * area[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
+                    } else outputPoint[0] = 1 * area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
+                    ctx.textAlign="end";
+                    break;
+                case "center":
+                    if (fontAngle == JV.VERTICAL_ANGLE || fontAngle == JV.ANTI_VERTICAL_ANGLE) {
+                        outputPoint[1] = (1 * area[JV.IDX_TOP] + 1 * area[JV.IDX_BOTTOM]) / 2;
+                    } else outputPoint[0] = (1 * area[JV.IDX_LEFT] + 1 * area[JV.IDX_RIGHT]) / 2;
+                    ctx.textAlign="center";
+                    break;
+            }
+        }
+        function private_setupAreaV(area, type, fontAngle, dftFontHeight, outputPoint) {
+            var lType = type;
+            if (type != "top" && type != "bottom" && type != "center") lType = "top";
+            switch (lType) {
+                case "top":
+                    if (fontAngle == JV.VERTICAL_ANGLE) {
+                        outputPoint[0] = 1 * area[JV.IDX_RIGHT] - dftFontHeight - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
+                    } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
+                        outputPoint[0] = 1 * area[JV.IDX_LEFT] + dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
+                    } else outputPoint[1] = 1 * area[JV.IDX_TOP] + dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
+                    break;
+                case "bottom":
+                    if (fontAngle == JV.VERTICAL_ANGLE) {
+                        outputPoint[0] = 1 * area[JV.IDX_LEFT] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
+                    } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
+                        outputPoint[0] = 1 * area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
+                    } else outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
+                    break;
+                case "center":
+                    if (fontAngle == JV.VERTICAL_ANGLE) {
+                        outputPoint[0] = (1 * area[JV.IDX_LEFT] + 1 * area[JV.IDX_RIGHT] - dftFontHeight) / 2;
+                    } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
+                        outputPoint[0] = (1 * area[JV.IDX_LEFT] + 1 * area[JV.IDX_RIGHT] + dftFontHeight) / 2;
+                    } else outputPoint[1] = (1 * area[JV.IDX_TOP] + 1 * area[JV.IDX_BOTTOM] + dftFontHeight) / 2;
+                    break;
+            }
+        }
+        function private_drawText(val, area, font, control) {
+            var dftFontHeight = 12;
+            var output = [];
+            if (font) {
+                dftFontHeight = 1 * font[JV.FONT_PROPS[1]];
+                var dftOthers = "";
+                var dftFontBold = font[JV.FONT_PROPS[3]];
+                if (dftFontBold && dftFontBold == 'T') {
+                    dftOthers = "bold " + dftOthers ;
+                }
+                var dftFontItalic = font[JV.FONT_PROPS[4]];
+                if (dftFontItalic && dftFontItalic == 'T') {
+                    dftOthers = dftOthers + "italic ";
+                }
+                ctx.font = dftOthers + dftFontHeight + "px " + font[JV.PROP_NAME];
+            }
+            if (control) {
+                private_setupAreaH(area, control.Horizon, font.FontAngle, dftFontHeight, output);
+                private_setupAreaV(area, control.Vertical, font.FontAngle, dftFontHeight, output);
+            } else {
+                private_setupAreaH(area, "left", font.FontAngle, dftFontHeight, output);
+                private_setupAreaV(area, "bottom", font.FontAngle, dftFontHeight, output);
+            }
+            var w = area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
+            if (font.FontAngle != "0") {
+                w = area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] - area[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
+            }
+            ctx.save();
+            ctx.translate(output[0], output[1]);
+            if (font.FontAngle == JV.VERTICAL_ANGLE) {
+                ctx.rotate(Math.PI/2);
+            } else if (font.FontAngle == JV.ANTI_VERTICAL_ANGLE) {
+                ctx.rotate(-Math.PI/2);
+            }
+            if (w >= ctx.measureText(val).width) {
+                ctx.fillText(val, 0, 0);
+            } else {
+                while (true) {
+                    dftFontHeight--;
+                    ctx.font = "" + dftFontHeight + "px " + font[JV.PROP_NAME];
+                    if (w >=  ctx.measureText(val).width || dftFontHeight < 6) {
+                        ctx.fillText(val, 0, 0);
+                        break;
+                    }
+                }
+            }
+            ctx.restore();
+        }
+        function private_drawCellText(cell, fonts, controls) {
+            if (cell[JV.PROP_VALUE]) {
+                var values = ("" + cell[JV.PROP_VALUE]).split('|');
+                var font = fonts[cell[JV.PROP_FONT]];
+                var control = controls[cell[JV.PROP_CONTROL]];
+                var height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
+                var area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + me.offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + me.offsetY];
+                for (var i = 0; i < values.length; i++) {
+                    area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + me.offsetY;
+                    area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + me.offsetY;
+                    private_drawText(values[i], area, font, control);
+                }
+            }
+        }
+        function private_drawLine(cell, ctx, style, styleBorderDest, startP, destP, mergedBand, styles) {
+            ctx.beginPath();
+            var destStyle = style;
+            if (mergedBand) {
+                if (mergedBand[styleBorderDest] == cell[JV.PROP_AREA][styleBorderDest]) {
+                    destStyle = styles[mergedBand[JV.PROP_STYLE][JV.PROP_ID]];
+                }
+            }
+            ctx.moveTo(cell[JV.PROP_AREA][startP[0]] + me.offsetX, cell[JV.PROP_AREA][startP[1]] + me.offsetY);
+            if (destStyle[styleBorderDest] && destStyle[styleBorderDest][JV.PROP_LINE_WEIGHT] != 0) {
+                ctx.lineWidth = 1.0 * destStyle[styleBorderDest][JV.PROP_LINE_WEIGHT];
+                ctx.strokeStyle = destStyle[styleBorderDest][JV.PROP_COLOR];
+                ctx.lineTo(cell[JV.PROP_AREA][destP[0]] + me.offsetX, cell[JV.PROP_AREA][destP[1]] + me.offsetY);
+            }
+            ctx.stroke();
+        }
+        function private_drawCell(cell, fonts, styles, controls, mergedBand) {
+            ctx.save();
+            ctx.translate(0.5,0.5);
+            var style = styles[cell[JV.PROP_STYLE]];
+            if (style) {
+                private_drawLine(cell, ctx, style, JV.PROP_TOP, [JV.PROP_LEFT, JV.PROP_TOP],[JV.PROP_RIGHT, JV.PROP_TOP], mergedBand, styles);
+                private_drawLine(cell, ctx, style, JV.PROP_RIGHT, [JV.PROP_RIGHT, JV.PROP_TOP],[JV.PROP_RIGHT, JV.PROP_BOTTOM], mergedBand, styles);
+                private_drawLine(cell, ctx, style, JV.PROP_BOTTOM, [JV.PROP_RIGHT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_BOTTOM], mergedBand, styles);
+                private_drawLine(cell, ctx, style, JV.PROP_LEFT, [JV.PROP_LEFT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_TOP], mergedBand, styles);
+            }
+            private_drawCellText(cell, fonts, controls);
+            ctx.restore();
+        }
+
+        for(var p=1;p<50;p++){
+            pageIdx=p;
+            if (pageObj && pageObj.items.length > 0 && canvas && pageObj.items.length >= pageIdx) {
+                var page = pageObj.items[pageIdx - 1],
+                    fonts = pageObj[JV.NODE_FONT_COLLECTION],
+                    styles = pageObj[JV.NODE_STYLE_COLLECTION],
+                    controls = pageObj[JV.NODE_CONTROL_COLLECTION],
+                    mergedBand = pageObj[JV.BAND_PROP_MERGE_BAND];
+                for (var j = 0; j < page.cells.length; j++) {
+                    var cell = page.cells[j];
+                    private_drawCell(cell, fonts, styles, controls, mergedBand);
+                }
+            }
+            ctx.addPage();
+        }
+
+        fs.writeFile('report.pdf', canvas.toBuffer());
+    },
+    drawPageBorder: function(rptTpl, canvas, resolution) {
+        var me = this;
+        var size = rptTpl[JV.NODE_PAGE_INFO].slice(0);
+        size[0] = Math.round(resolution[0] * size[0]);
+        size[1] = Math.round(resolution[0] * size[1]);
+
+        var ctx = canvas.getContext("2d");
+        ctx.save();
+        ctx.beginPath();
+        ctx.translate(0.5,0.5);
+        ctx.lineWidth = 1;
+        ctx.moveTo(me.offsetX, me.offsetY);
+        ctx.lineTo(size[0] + me.offsetX, me.offsetY);
+        ctx.lineTo(size[0] + me.offsetX, size[1] + me.offsetY);
+        ctx.lineTo(me.offsetX, size[1] + me.offsetY);
+        ctx.lineTo(me.offsetX, me.offsetY);
+        ctx.stroke();
+        ctx.restore();
+
+        ctx.fillStyle="black";
+        ctx.fillRect(size[0] + me.offsetX,10 + me.offsetY,10,size[1]);
+        ctx.fillRect(10 + me.offsetX,size[1] + me.offsetY,size[0],10);
+    }
+}
+
+
+let rpt_oj = reportO.reportObj;
+
+
+
+JpcCanvasOutput.drawToCanvas(rpt_oj,canvas,1);

BIN
modules/reports/util/pdf_base_files/Smart-italic.ttf


BIN
modules/reports/util/pdf_base_files/Smart.ttf


BIN
modules/reports/util/pdf_base_files/hwxsb.ttf


modules/reports/util/pdf/rpt_pdf_consts.js → modules/reports/util/pdf_base_files/rpt_pdf_consts.js


+ 59 - 0
modules/reports/util/pdfkit_test.js

@@ -0,0 +1,59 @@
+/**
+ * Created by chen on 2017/7/28.
+ */
+
+
+var pdf = require('pdfkit');
+var fs = require('fs');
+var doc = new pdf({autoFirstPage: false});
+var text = '测试,he';
+
+doc.pipe(fs.createWriteStream('测试.pdf'));
+doc.font('simsunB.ttf');
+
+for(var p=0;p<50;p++){
+    doc.addPage({size:[1200,900]});
+
+    doc.rect(30,113,76,609).lineWidth(0.5).strokeColor('black').stroke();
+    doc.text('报表报表报表',42,717,{ height: 100, width: 500,align: 'left'});
+
+
+   /* let width = 70;
+    let height=20;
+    let j = 100;
+    let sum = 0;
+    for(i=0;i<400;i++){
+        if(i%15==0){
+            j+=height;
+            sum = 0;
+        }
+        sum =sum+width;
+        let  x = sum;
+        let y  = j;
+        doc.rect(x,y,width,height).lineWidth(0.5).strokeColor('black').stroke();
+      /!*  doc.lineWidth(1.5);
+        doc.moveTo(x,y).lineTo(x,y+height);
+        doc.lineTo(x+width,y+height);
+        doc.lineTo(x+width,y);
+        doc.lineTo(x,y)
+        doc.strokeColor('black').stroke();*!/
+
+
+        doc.fontSize(12);
+        doc.text(text,x,5+y,{
+            height: height,
+            width: width,
+            align: 'right'});
+
+        // doc.text('报表文件',100,100);
+    }*/
+    doc.save();
+  /*  doc.fontSize(20);
+    doc.rotate(-20,{origin:[400, 105]})
+    doc.text('报表报表报表',300,110,{ height: 100, width: 500,align: 'left'});*/
+    doc.restore();
+}
+
+
+
+doc.end();

+ 42 - 38
modules/reports/util/pdf/rpt_pdf_util.js

@@ -1,25 +1,37 @@
 /**
+ * Created by chen on 2017/8/16.
+ */
+/**
  * Created by zhang on 2017/8/14.
  */
 
-const prf_cons = require('./rpt_pdf_consts');
+const prf_cons = require('./pdf_base_files/rpt_pdf_consts');
 var pdf = require('pdfkit');
 var fs = require('fs');
-let reportO = require('./reportOj');
+let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
+let DPI = jpcCmnHelper.getScreenDPI()[0];
+//let JV = prf_cons.JV;
+let JV = require('../rpt_component/jpc_value_define');
+
+module.exports ={
+    export_pdf_file:export_pdf_file
+}
+
 
-let JV = prf_cons.JV;
-export_pdf_file();
-function export_pdf_file (data) {
+function export_pdf_file (pageData, paperSize, fName, callback) {
     let offsetX= 10;
     let offsetY=10;
     var doc = new pdf({autoFirstPage: false});
-    doc.pipe(fs.createWriteStream('导出.pdf'));
-    let pageObj = reportO.reportObj;
-   // doc.rect(5,5,1190,890).lineWidth(1).strokeColor('black').stroke();//边框
+    let newName = '' + (new Date()).valueOf();
+    let stream = doc.pipe(fs.createWriteStream(__dirname.slice(0, __dirname.length - 21) + '/tmp/'+newName+'.pdf'));
+    let pageObj = pageData;
+    // doc.rect(5,5,1190,890).lineWidth(1).strokeColor('black').stroke();//边框
+    let paperSizeIdx = JV.PAGES_SIZE_STR.indexOf(paperSize);
+    let size = JV.PAGES_SIZE[paperSizeIdx];
 
     if (pageObj && pageObj.items.length > 0 ) {
         for(let i=0;i<pageObj.items.length;i++){
-            doc.addPage({size:[1200,900]});
+            doc.addPage({size:[size[1]*DPI,size[0]*DPI]});
             var page = pageObj.items[i],
                 fonts = pageObj[JV.NODE_FONT_COLLECTION],
                 styles = pageObj[JV.NODE_STYLE_COLLECTION],
@@ -33,6 +45,10 @@ function export_pdf_file (data) {
         }
     }
     doc.end();
+    stream.on('finish',function () {
+        console.log(newName + ".pdf was written.");
+        callback(newName);
+    })
 
 
     function private_drawCell(cell, fonts, styles, controls, mergedBand) {
@@ -86,18 +102,15 @@ function export_pdf_file (data) {
         var output = [];
         if (font) {
             dftFontHeight = 1 * font[JV.FONT_PROPS[1]];
-            var dftOthers = "";
             var dftFontBold = font[JV.FONT_PROPS[3]];
+            var dftFontItalic = font[JV.FONT_PROPS[4]];
             if (dftFontBold && dftFontBold == 'T') {
-                doc.font('simsunB.ttf');
+                doc.font(__dirname+'/pdf_base_files/hwxsb.ttf');
+            }else if(dftFontItalic && dftFontItalic == 'T'){
+                doc.font(__dirname+'/pdf_base_files/Smart-italic.ttf');
             }else {
-                doc.font('Smart.ttf');
+                doc.font(__dirname+'/pdf_base_files/Smart.ttf');
             }
-         /*   var dftFontItalic = font[JV.FONT_PROPS[4]]; 没有找到中文斜体的字库,暂不支持
-            if (dftFontItalic && dftFontItalic == 'T') {
-                dftOthers = dftOthers + "italic ";
-            }*/
-           // ctx.font = dftOthers + dftFontHeight + "px " + font[JV.PROP_NAME];
             doc.fontSize(dftFontHeight);
         }
         var options={};
@@ -152,17 +165,17 @@ function export_pdf_file (data) {
     function private_setupAreaV(area, type, fontAngle, dftFontHeight, outputPoint) {
         var lType = type;
         if (type != "top" && type != "bottom" && type != "center") lType = "top";
-         switch (lType) {
-             case "top":
-                 outputPoint[1] = 1 * area[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
-                 break;
-             case "bottom":
-                 outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM]-dftFontHeight;
-                 break;
-             case "center":
-                 outputPoint[1] = 1 * area[JV.IDX_TOP] + (1 * area[JV.IDX_BOTTOM]-1 * area[JV.IDX_TOP]- dftFontHeight) / 2;
-                 break;
-         }
+        switch (lType) {
+            case "top":
+                outputPoint[1] = 1 * area[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
+                break;
+            case "bottom":
+                outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM]-dftFontHeight;
+                break;
+            case "center":
+                outputPoint[1] = 1 * area[JV.IDX_TOP] + (1 * area[JV.IDX_BOTTOM]-1 * area[JV.IDX_TOP]- dftFontHeight) / 2;
+                break;
+        }
     }
 
     function private_setupAreaRotateOption(area,w, type="top",dftFontHeight,outputPoint){
@@ -186,13 +199,4 @@ function export_pdf_file (data) {
         return rotateOptions;
     }
 
-}
-
-
-
-
-
-
-
-
-
+}

+ 13 - 0
web/maintain/report/rpt_test.html

@@ -32,6 +32,7 @@
                 <input type="button" value="后一页 >" onclick="showPage(1)"/>
                 <input type="button" value="打印" onclick="printCurrentPage()"/>
                 <input type="button" value="Excel" onclick="getExcel()"/>
+                <input type="button" value="PDF" onclick="getPDF()"/>
                 <label>
                     <input type="checkbox" id="isOneSheetChk" onclick="isOneSheet = this.checked;">
                     Excel单页输出
@@ -129,6 +130,18 @@
         window.location = url;//这里不能使用get方法跳转,否则下载不成功
     }
 
+    function getPDF() {
+        let rpt = document.getElementById("select_k1");
+        let size = document.getElementById("select_k2");
+        let rpt_name = rpt.options[rpt.selectedIndex].text;
+        if (rpt.selectedIndex >= 0 && size.selectedIndex >= 0) {
+            rpt_id = rpt.options[rpt.selectedIndex].value;
+            rpt_size = size.options[size.selectedIndex].value;
+        }
+        let url =  "/report_api/getPDF/" + rpt_id + "/" + rpt_size + "/" + rpt_name;
+        window.location = url;
+    }
+
     function ajaxCall() {
         if (setupReport()) {
             let canvas = document.getElementById("myCanvas");