myprint-design
Version:
操作简单,组件丰富的一站式打印解决方案打印设计器
1 lines • 40.8 kB
Source Map (JSON)
{"version":3,"file":"autoPage.mjs","sources":["../../../../../src/components/preview/autoPage.ts"],"sourcesContent":["import {\n downloadImg2Base64,\n generateUUID,\n parse,\n replaceSpacesOutsideHTMLTags,\n stringify\n} from '@myprint/design/utils/utils';\nimport { px2unit, unit2px } from '@myprint/design/utils/devicePixelRatio';\nimport { nextTick, reactive, Ref } from 'vue-demi';\nimport {\n FormatterVariable,\n MyElement,\n Panel,\n PreviewContainerWrapper,\n PreviewContext,\n PreviewWrapper,\n RuntimeElementOption,\n TableCellElement\n} from '@myprint/design/types/entity';\nimport { element2PreviewWrapper, formatter } from '@myprint/design/utils/elementUtil';\nimport numberUtil from '@myprint/design/utils/numberUtil';\nimport {\n lastHeadList,\n previewRowStatisticsList,\n previewTableStatisticsList,\n statisticsData\n} from '@myprint/design/utils/table/dataTable';\nimport { isEmpty } from 'lodash';\n\nexport async function autoPage(previewEl: Ref<HTMLDivElement[] | undefined>, pageList: Array<PreviewContainerWrapper>, panel: Panel, previewDataList?: any[]) {\n if (previewDataList == null) {\n previewDataList = [{}];\n }\n const variable = {\n pageIndex: 0,\n pageSize: 0,\n nowDate: new Date()\n } as FormatterVariable;\n\n // 初始化element offsetTop\n let offsetLastElementTop = 0;\n const fixedPreviewElementList: PreviewWrapper[] = [];\n const previewElementList: PreviewWrapper[] = [];\n\n let previewContext = {\n currentPreview: undefined!,\n autoPageIs: false,\n previewData: {},\n panel: panel,\n pageList: [],\n currentPage: undefined! as any,\n top: 0,\n bottom: panel.height, // 单位 mm\n pagingRepetition: true\n } as PreviewContext;\n // 处理elementWrapper\n for (let myElement of previewContext.panel.elementList) {\n handleElement(myElement);\n }\n\n if (previewContext.panel.pageHeader) {\n handleElement(previewContext.panel.pageHeader);\n }\n if (previewContext.panel.pageFooter) {\n handleElement(previewContext.panel.pageFooter);\n }\n\n function handleElement(myElement: MyElement) {\n const previewElement = element2PreviewWrapper(myElement);\n if (previewElement.previewWrapperList != null && previewElement.previewWrapperList.length > 0) {\n for (let i = previewElement.previewWrapperList.length - 1; i >= 0; i--) {\n const pageNumPreviewElement = previewElement.previewWrapperList[i];\n // 处理嵌套 pageNum\n if (pageNumPreviewElement.option.fixed) {\n pageNumPreviewElement.x = pageNumPreviewElement.x + previewElement.x;\n pageNumPreviewElement.y = pageNumPreviewElement.y + previewElement.y;\n\n fixedPreviewElementList.push(pageNumPreviewElement);\n previewElement.previewWrapperList.splice(i, 1);\n }\n }\n }\n // if (elementTypeContainerList.includes(previewElement.type)) {\n // previewElement.previewWrapperList = [];\n // }\n\n if (previewElement.option.fixed) {\n fixedPreviewElementList.push(previewElement);\n } else {\n previewElementList.push(previewElement);\n }\n }\n\n // 排序\n previewElementList.sort((o1, o2) => {\n return o1.y - o2.y;\n });\n\n // 计算每个元素距离上个元素的距离\n for (let previewWrapper of previewElementList) {\n previewWrapper.offsetLastElementTop = numberUtil.subScale(previewWrapper.y, offsetLastElementTop);\n offsetLastElementTop = numberUtil.sumScale(previewWrapper.y, previewWrapper.height);\n }\n\n for (let previewData of previewDataList) {\n previewContext.previewData = previewData;\n // 固定高度 表格分页打印\n while (previewContext.pagingRepetition) {\n previewContext.pagingRepetition = false;\n previewContext.currentPreview = undefined!;\n\n await newPage();\n await installPreviewElement(previewElementList);\n }\n\n previewContext.pagingRepetition = true;\n }\n\n previewContext.autoPageIs = false;\n variable.pageSize = pageList.length;\n // 每页设置页码\n // 组装固定元素\n for (let i = 0; i < pageList.length; i++) {\n previewContext.currentPage = pageList[i];\n variable.pageIndex = i + 1;\n await installPreviewElement(fixedPreviewElementList);\n }\n\n // 所有的都处理完,如果是自动高度,要重新计算一下高度\n if (panel.pageSize == 'AutoHeight') {\n await nextTick();\n const lastElementChild = previewEl.value![0].lastElementChild;\n if (lastElementChild) {\n const rect = lastElementChild.getBoundingClientRect();\n pageList[0].height = px2unit(rect.bottom, panel);\n panel.runtimeOption.printRealHeight = pageList[0].height;\n }\n }\n\n async function installPreviewElement(previewElementList: PreviewWrapper[]) {\n for (let i = 0; i < previewElementList.length; i++) {\n const oldPreviewWrapper = previewElementList[i];\n let previewWrapper = element2PreviewWrapper(previewElementList[i]);\n\n // 计算顶部需不需要偏移\n if (!previewWrapper.option.fixed) {\n // 页面顶部有偏移\n // debugger\n if (previewContext.currentPage.offsetTop > 0 && previewContext.currentPreview) {\n if (previewContext.currentPreview.heightIs) {\n previewWrapper.y = previewContext.currentPreview.y + previewContext.currentPreview.height + previewWrapper.offsetLastElementTop;\n } else {\n // debugger\n previewWrapper.y = numberUtil.sumScale(previewContext.currentPage.offsetTop, previewWrapper.offsetLastElementTop);\n }\n\n }\n\n // 判断需不需要分页\n // console.log(await isNeedNewPage(previewWrapper.y, previewContext.bottom));\n // console.log(await isNeedNewPage(previewWrapper.y + previewWrapper.height, previewContext.bottom));\n if (previewWrapper.type != 'PageFooter'\n && previewContext.currentPage.previewWrapperList.length > 0\n && (await isNeedNewPage(previewWrapper.y, previewContext.bottom) || await isNeedNewPage(previewWrapper.y + previewWrapper.height, previewContext.bottom))) {\n previewWrapper.y = 1;\n previewContext.currentPage!.offsetTop = 1;\n }\n }\n\n if (previewWrapper.option.fixed && previewWrapper.option.displayStrategy != undefined) {\n switch (previewWrapper.option.displayStrategy) {\n case 'firstPage':\n if (variable.pageIndex != 1) {\n continue;\n }\n break;\n case 'lastPage':\n if (variable.pageIndex != variable.pageSize) {\n continue;\n }\n break;\n case 'none':\n continue;\n case 'oddPage':\n if (variable.pageIndex % 2 != 1) {\n continue;\n }\n break;\n case 'evenPage':\n if (variable.pageIndex % 2 != 0) {\n continue;\n }\n break;\n }\n }\n\n previewContext.currentPreview = previewWrapper;\n\n // 需要data\n let previewDataTmp: any;\n\n if (previewWrapper.field) {\n // 打印数据\n previewDataTmp = previewContext.previewData[previewWrapper.field];\n }\n\n if (!previewDataTmp) {\n // 格式化数据\n previewDataTmp = formatter(previewWrapper, variable);\n }\n\n if (!previewDataTmp) {\n // 设计数据\n previewDataTmp = previewWrapper.data;\n }\n\n if (previewWrapper.type == 'Image') {\n previewWrapper.data = previewDataTmp;\n // 如果是图片地址,则下载下来\n if (!isEmpty(previewWrapper.data) && (previewWrapper.data as string).startsWith('http')) {\n // 网络图片,下载下来\n try {\n previewWrapper.data = await downloadImg2Base64(previewWrapper.data);\n } catch (e: any) {\n previewWrapper.data = '图片加载错误';\n }\n }\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n await nextTick();\n } else if (previewWrapper.type == 'Text' || previewWrapper.type == 'PageNum' || previewWrapper.type == 'TextTime') {\n\n if (previewWrapper.type == 'PageNum') {\n previewWrapper = element2PreviewWrapper(previewWrapper);\n previewContext.currentPreview = previewWrapper;\n previewElementList[i] = previewWrapper;\n }\n\n if (previewWrapper.contentType == 'Text') {\n if (previewDataTmp) {\n previewDataTmp = replaceSpacesOutsideHTMLTags(previewDataTmp);\n }\n await autoTextElement(previewDataTmp, true);\n }\n\n previewWrapper.data = previewDataTmp;\n if (previewWrapper.contentType == 'QrCode') {\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n await nextTick();\n }\n if (previewWrapper.contentType == 'Barcode') {\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n await nextTick();\n }\n } else if (previewWrapper.type == 'DataTable') {\n let tableRowIndex = 0;\n await autoTableRow(previewContext, previewDataTmp, tableRowIndex);\n } else if (previewWrapper.type == 'Container') {\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n const tmpPage = previewContext.currentPage;\n previewContext.currentPage = previewWrapper;\n previewWrapper.previewWrapperList = [];\n await installPreviewElement(oldPreviewWrapper.previewWrapperList);\n previewContext.currentPage = tmpPage;\n } else if (previewWrapper.type == 'PageHeader') {\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n const tmpPage = previewContext.currentPage;\n previewContext.currentPage = previewWrapper;\n previewWrapper.previewWrapperList = [];\n await installPreviewElement(oldPreviewWrapper.previewWrapperList);\n previewContext.currentPage = tmpPage;\n } else if (previewWrapper.type == 'PageFooter') {\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n const tmpPage = previewContext.currentPage;\n previewContext.currentPage = previewWrapper;\n previewWrapper.previewWrapperList = [];\n await installPreviewElement(oldPreviewWrapper.previewWrapperList);\n previewContext.currentPage = tmpPage;\n } else {\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n }\n\n if (!previewContext.currentPreview.heightIs) {\n // 重新计算顶部偏移\n previewContext.currentPage.offsetTop = (await computeBottom(previewContext.currentPreview))!;\n }\n\n previewContext.currentPreview = previewWrapper;\n }\n }\n\n async function autoTextElement(previewData: string, first: boolean) {\n let previewWrapper = previewContext.currentPreview;\n previewWrapper.data = previewData;\n previewWrapper.heightIs = false;\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n await nextTick();\n const height = previewWrapper.target.clientHeight;\n\n /**\n * 非自动高度\n */\n if (previewWrapper.option.autoTextHeight == null || !previewWrapper.option.autoTextHeight) {\n previewWrapper.heightIs = true;\n return false;\n }\n\n if (first && height < previewWrapper.runtimeOption.height) {\n previewWrapper.heightIs = true;\n // console.log('小')\n return false;\n } else {\n // console.log('大')\n }\n\n // console.log(height)\n if (previewWrapper.y + px2unit(height, panel) < previewContext.bottom) {\n return false;\n } else {\n // console.log(previewWrapper)\n }\n\n let mid = await binary_search(previewWrapper, previewData, 1, previewData.length);\n // console.log(mid)\n\n if (mid > 0 && mid < previewData.length) {\n // console.log('文本分页');\n if (previewContext.autoPageIs) {\n await newPage();\n previewContext.currentPreview = element2PreviewWrapper(previewWrapper);\n // previewWrapper.element = previewWrapper\n previewContext.currentPreview.y = previewContext.top;\n // console.log(previewWrapper)\n await autoTextElement(previewData.substring(mid + 1, previewData.length), false);\n return true;\n }\n // data.currentPage.offsetTop = computeBottom({previewWrapper: previewWrapper} as PreviewWrapper)\n }\n\n return false;\n }\n\n async function autoTableRow(previewContext: PreviewContext, previewDataList: Array<any>, index: number) {\n if (previewDataList == null) {\n previewDataList = [];\n }\n let previewWrapper = previewContext.currentPreview;\n if (previewWrapper.option.tableHeightType == 'AUTO') {\n previewWrapper.heightIs = false;\n }\n\n previewContext.currentPage.previewWrapperList.push(previewWrapper);\n await nextTick();\n const table = previewWrapper.target;\n if (!table) {\n return false;\n }\n const tableHeadList = [...previewWrapper.tableHeadList];\n const headList = lastHeadList(tableHeadList);\n const bodyList = previewWrapper.tableBodyList[0];\n if (previewWrapper.statisticsList == null) {\n previewWrapper.statisticsList = [];\n }\n const tableStatisticsList = [...previewWrapper.statisticsList];\n const tableStatisticsSize = tableStatisticsList.length;\n let statisticsListWrapper: Record<number, any[]> = {};\n let tableStaticsListWrapper: Record<number, any[]> = {};\n if (previewWrapper.tableHeadHiddenIs) {\n previewWrapper.tableHeadList.length = 0;\n for (let j = 0; j < bodyList.length; j++) {\n bodyList[j].runtimeOption.width = headList[j].runtimeOption.width;\n }\n\n // 设置第一行的宽度<不然表格宽度有问题\n }\n previewWrapper.tableBodyList.length = 0;\n previewWrapper.statisticsList.length = 0;\n if (index < previewDataList.length) {\n previewTableStatisticsList(tableStatisticsList, previewWrapper.statisticsList, statisticsListWrapper, headList);\n }\n const previewDataTmpList: any[] = [];\n let i = index;\n for (; i < previewDataList.length + tableStatisticsSize; i++) {\n const rowList: TableCellElement[] = [];\n if (i < previewDataList.length) {\n const previewData = previewDataList[i];\n previewDataTmpList.push(previewData);\n // 序号\n if (!previewData['autoIncrement']) {\n previewData['autoIncrement'] = i + 1;\n }\n for (let j = 0; j < headList.length; j++) {\n const head = headList[j];\n bodyList[j].data = previewData[head.field!];\n rowList.push(element2PreviewWrapper(bodyList[j]));\n }\n\n previewWrapper.tableBodyList.push(rowList);\n } else {\n // debugger\n // 计算\n const tableStatisticsIndex = i - previewDataList.length;\n const rowList = [...tableStatisticsList[tableStatisticsIndex]];\n let hasCell = previewRowStatisticsList(rowList, tableStaticsListWrapper, headList, 'tableStatisticsIs');\n if (hasCell) {\n previewWrapper.statisticsList.push(rowList);\n }\n }\n\n await nextTick();\n // console.log(table.height())\n\n if (previewWrapper.option.tableHeightType == 'FIXED') {\n // 固定高度\n if (table.childNodes[1].clientHeight > unit2px(previewWrapper.height, panel)) {\n if (i == index) {\n previewWrapper.previewTableRowIndex = i + 1;\n previewContext.pagingRepetition = true;\n } else {\n previewWrapper.tableBodyList.pop();\n previewDataTmpList.pop();\n previewWrapper.previewTableRowIndex = i;\n previewContext.pagingRepetition = true;\n }\n statisticsData(previewDataTmpList, statisticsListWrapper);\n if (i >= previewDataList.length) {\n statisticsData(previewDataList, tableStaticsListWrapper);\n }\n previewDataTmpList.pop();\n break;\n }\n }\n\n if (await isNeedNewPage(unit2px(previewWrapper.y, panel) + table.clientHeight, unit2px(previewContext.bottom, panel))) {\n // 删除刚才创建的\n previewWrapper.tableBodyList.pop();\n previewDataTmpList.pop();\n // 统计\n statisticsData(previewDataTmpList, statisticsListWrapper);\n // if (i >= previewDataList.length) {\n // statisticsData(previewDataList, tableStaticsListWrapper);\n // }\n previewContext.currentPreview = element2PreviewWrapper(previewWrapper);\n previewWrapper = previewContext.currentPreview;\n if (!previewWrapper.option.tablePageHeadIs) {\n previewWrapper.tableHeadHiddenIs = true;\n }\n previewWrapper.tableHeadList = [...tableHeadList];\n previewWrapper.statisticsList = [...tableStatisticsList];\n previewWrapper.runtimeOption = parse(stringify(previewWrapper.runtimeOption, 'parent'), {} as RuntimeElementOption);\n previewWrapper.tableBodyList = [bodyList];\n previewWrapper.y = previewContext.top + 1;\n await autoTableRow(previewContext, previewDataList, i);\n // data.currentPage.offsetTop = await computeBottom({previewWrapper: previewWrapper} as PreviewWrapper)\n break;\n }\n }\n\n if (i >= previewDataList.length) {\n statisticsData(previewDataTmpList, statisticsListWrapper);\n }\n statisticsData(previewDataList, tableStaticsListWrapper);\n }\n\n /**\n * 单位 px\n */\n async function isNeedNewPage(y: number | undefined, bottom: number | undefined, callback?: () => void) {\n\n if (!previewContext.autoPageIs) {\n return false;\n }\n if (previewContext.panel.pageSize == 'AutoHeight') {\n return false;\n }\n\n // 为啥+1\n if (y! > bottom! + 1) {\n if (callback) {\n callback();\n }\n await newPage();\n return true;\n }\n return false;\n }\n\n async function newPage() {\n previewContext.currentPage = reactive({\n id: generateUUID(),\n width: previewContext.panel.width,\n height: previewContext.panel.height,\n offsetTop: 0,\n previewWrapperList: []\n } as any);\n previewContext.pageList.push(previewContext.currentPage);\n previewContext.autoPageIs = true;\n pageList.push(previewContext.currentPage!);\n // 处理页头,页脚\n\n await nextTick();\n // getPanelDiv();\n\n if (previewContext.panel.pageHeader) {\n let preview = previewContext.panel.pageHeader as PreviewWrapper;\n previewContext.currentPage!.previewWrapperList!.push(preview);\n previewContext.top = (await computeBottom(preview))!;\n }\n if (previewContext.panel.pageFooter) {\n let preview = previewContext.panel.pageFooter as PreviewWrapper;\n previewContext.currentPage!.previewWrapperList!.push(preview);\n previewContext.bottom = (await computeTop(preview))!;\n }\n }\n\n async function computeBottom(previewWrapper: PreviewWrapper) {\n await nextTick();\n if (!previewWrapper.target) {\n return;\n }\n const div = previewWrapper.target;\n // debugger\n return numberUtil.toFixed(px2unit(numberUtil.sumScale(div.offsetTop, div.offsetHeight), panel));\n }\n\n async function computeTop(previewWrapper: PreviewWrapper) {\n await nextTick();\n if (!previewWrapper.target) {\n return;\n }\n const div = previewWrapper.target;\n // console.log(div.offsetTop);\n return numberUtil.toFixed(px2unit(div.offsetTop, panel));\n }\n\n async function computeTextHeight(previewWrapper: PreviewWrapper, previewDataTmp: any) {\n previewWrapper.data = previewDataTmp;\n await nextTick();\n const itemRef = previewWrapper.target;\n // console.log(div)\n if (!itemRef) {\n // debugger\n return;\n }\n const height = previewWrapper.target.clientHeight;\n return previewWrapper.y + px2unit(height, panel) < previewContext.bottom;\n }\n\n async function binary_search(previewWrapper: PreviewWrapper, previewData: string, low: number, height: number): Promise<any> {\n if (low > height) {\n // console.log(\"low > height\")\n return -1;\n }\n const mid = Math.floor((height + low) / 2);\n let isH = await computeTextHeight(previewWrapper, previewData.substring(0, mid + 2));\n let isL = await computeTextHeight(previewWrapper, previewData.substring(0, mid + 1));\n // console.log(data.substring(0, mid + 1))\n // console.log(mid)\n // if (!isH && !isL) {\n // return -1\n // }\n if (isL && !isH) {\n // console.log('返回');\n return mid;\n } else if (!isH) {\n height = mid - 1;\n // console.log('减少', height);\n return binary_search(previewWrapper, previewData, low, height);\n } else if (isL) {\n low = mid + 1;\n // console.log('增加', low);\n return binary_search(previewWrapper, previewData, low, height);\n } else {\n return -1;\n }\n }\n}\n\n\n\n"],"names":["numberUtil","previewElementList","previewContext","previewDataList","rowList"],"mappings":"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"}