{"version":3,"file":"pdfUtil.mjs","sources":["../../../../src/utils/pdfUtil.ts"],"sourcesContent":["import html2canvas from 'html2canvas';\nimport JsPDF from 'jspdf';\nimport { unit2unit } from '@myprint/design/utils/devicePixelRatio';\n\nlet defaultOptions = {\n    name: new Date().getTime(),\n    scale: window.devicePixelRatio,\n    padding: 0,\n    useCORS: true,\n    logging: true,\n    dpi: 144, // 设置dpi，会使图片高清一些\n    width: -1,\n    height: -1\n    // allowTaint: true\n};\n\nexport function chrome2Img(pageDomList: any, options: any) {\n    return new Promise<Blob[]>((resolve, _reject) => {\n        defaultOptions.width = options.width;\n        defaultOptions.height = options.height;\n        const imageMap: Record<number, Blob> = {};\n        const imageList: Blob[] = [];\n        let count = 0;\n        for (let i = 0; i < pageDomList.length; i++) {\n            let pageDom = pageDomList[i] as HTMLDivElement;\n            // console.log(pageDom)\n            // pageDom.style.display = 'block';\n            // 忽略无用节点（主要是这个）\n            // @ts-ignore\n            // defaultOptions.ignoreElements = e => {\n            //     if (\n            //         e.contains(pageDom) ||\n            //         pageDom.contains(e) ||\n            //         e.tagName === 'STYLE' ||\n            //         e.tagName === 'LINK' ||\n            //         e.getAttribute('data-html2canvas') != null // header里面的样式不能筛掉\n            //     ) {\n            //         console.log(e);\n            //         return false;\n            //     }\n            //     // console.log(e.tagName);\n            //     return true;\n            // };\n            requestAnimationFrame(() => {\n                html2canvas(pageDom, defaultOptions)\n                    .then(canvas => {\n                        canvas.toBlob((blob: Blob) => {\n                            count++;\n                            imageMap[i] = blob;\n                            if (count == pageDomList.length) {\n                                for (let j = 0; j < count; j++) {\n                                    imageList.push(imageMap[j]);\n                                }\n                                // imgListCallback(imageList);\n                                resolve(imageList);\n                            }\n                        }, 'image/jpeg', 1.0);\n                    });\n            });\n\n            // 生成的画布元素宽高（需要收缩回原比例大小）\n            // console.log(canvas.width,  canvas.height)\n            // console.log(options.scale)\n            // let canvasWidth = canvas.width / defaultOptions.scale;\n            // let canvasHeight = canvas.height / defaultOptions.scale;\n            // console.log(canvasWidth, canvasHeight);\n\n            // 页面等比例缩放后宽高\n            // let pageWidth = a4Width;\n            // let pageHeight = (a4Width / canvasWidth) * canvasHeight;\n\n\n            //返回图片dataURL，参数：图片格式和清晰度(0-1)\n            // let jpeg = canvas.toDataURL();\n            // console.log(canvasHeight, options.height)\n            // let img = document.createElement(\"img\");\n            // img.src = jpeg\n            // img.style.zIndex = 99999\n            // document.body.append(img)\n\n            //方向默认竖直，尺寸ponits，格式a4[595.28,841.89]\n\n            //有两个高度需要区分，一个是html页面的实际高度，和生成pdf的页面高度(841.89)\n            //当内容未超过pdf一页显示的范围，无需分页\n            // doc.addImage(jpeg, 'JPEG', 0, 0, canvasWidth, canvasHeight); // 从图片顶部开始打印\n\n            // doc.addImage(jpeg, 'JPEG', 0, 0, canvasWidth, canvasHeight); // 从图片顶部开始打印\n\n            // doc.output('dataurlnewwindow');\n            // doc.save(options.name + '.pdf');\n\n            // if (i + 1 < pageDomList.length) {\n            //     doc.addPage();\n            // }\n        }\n\n        // const blob = doc.output('blob');\n        // window.open(URL.createObjectURL(blob));\n    });\n\n}\n\n/**\n * 单页打印\n * @param pageDomList\n * @param options\n */\nexport async function toPdf(pageDomList: any, options: any) {\n    let w = unit2unit('px', 'cm', options.width);\n    let h = unit2unit('px', 'cm', options.height);\n    let doc = new JsPDF(undefined, 'cm', [w, h]);\n    defaultOptions.width = options.width;\n    defaultOptions.height = options.height;\n    // console.log(pageDomList);\n    for (let i = 0; i < pageDomList.length; i++) {\n        let pageDom = pageDomList[i];\n        // console.log(pageDom)\n        const canvas = await html2canvas(pageDom, defaultOptions);\n        // 生成的画布元素宽高（需要收缩回原比例大小）\n        // console.log(canvas.width,  canvas.height)\n        // console.log(options.scale)\n        // let canvasWidth = canvas.width / defaultOptions.scale;\n        // let canvasHeight = canvas.height / defaultOptions.scale;\n        // console.log(canvasWidth, canvasHeight);\n\n        // 页面等比例缩放后宽高\n        // let pageWidth = a4Width;\n        // let pageHeight = (a4Width / canvasWidth) * canvasHeight;\n\n\n        //返回图片dataURL，参数：图片格式和清晰度(0-1)\n        let jpeg = canvas.toDataURL('image/jpeg', 1.0);\n        // console.log(jpeg);\n        // canvas.toBlob(blob1 => {\n        //     console.log(URL.createObjectURL(blob1));\n        // })\n        // console.log(canvasHeight, options.height)\n        // let img = document.createElement(\"img\");\n        // img.src = jpeg\n        // img.style.zIndex = 99999\n        // document.body.append(img)\n\n        //方向默认竖直，尺寸ponits，格式a4[595.28,841.89]\n\n        //有两个高度需要区分，一个是html页面的实际高度，和生成pdf的页面高度(841.89)\n        //当内容未超过pdf一页显示的范围，无需分页\n        // doc.addImage(jpeg, 'JPEG', 0, 0, canvasWidth, canvasHeight); // 从图片顶部开始打印\n        // console.log(canvasWidth, canvasHeight);\n        doc.addImage(jpeg, 'JPEG', 0, 0, w, h); // 从图片顶部开始打印\n\n        // doc.output('dataurlnewwindow');\n        // doc.save(options.name + '.pdf');\n\n        if (i + 1 < pageDomList.length) {\n            doc.addPage();\n        }\n    }\n\n    return doc.output('blob');\n    // window.open(URL.createObjectURL(blob));\n}\n"],"names":[],"mappings":"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"}