当前位置: 首页 > article >正文

基于表格滚动截屏(表格全部展开,没有滚动条)

import html2canvasPro from 'html2canvas'
// 截图,平辅表格
async function resetAgSize() {
  const allColumns = gridApi.value.getColumns()
  let totalColumnWidth = 0
  let totalColumnHeight = 0
  // 遍历每一个行节点
  gridApi.value.forEachNode((rowNode) => {
    totalColumnHeight += rowNode.rowHeight
  })
  // debugger
  // 遍历每一个列节点
  allColumns.forEach((column) => {
    totalColumnWidth += column.getActualWidth()
  })
  // 处理让内容撑开  ,渲染完毕之后
  // 重新应用更新后的设置到ag-grid
  AgGridVueScreen.value = document.querySelector('.ag-grid-vue') as HTMLElement
  const initHeight = AgGridVueScreen.value.getBoundingClientRect().height
  AgGridVueScreen.value.style.width = totalColumnWidth + 10 + 'px'
  AgGridVueScreen.value.style.height = totalColumnHeight + 100 + 'px'
  AgGridScreen.value = document.querySelector('.ag-grid') as HTMLElement
  AgGridScreen.value.style.height = initHeight + 'px'
  AgGridScreen.value.style.overflow = 'scroll'
  await nextTick()
  await onScreenshot(AgGridVueScreen.value, AgGridScreen.value)
  //截图结束后记得恢复表格原本样式
  AgGridVueScreen.value.style.height = initHeight + 'px'
  AgGridVueScreen.value.style.width = '100%'
  AgGridScreen.value.removeAttribute('style')
}

在这里插入图片描述

export default async function onScreenshot(dom, dom2) {
  console.log(dom2, dom2.scrollHeight)

  // 获取页面的总高度
  const pageHeight = dom2.scrollHeight
  // 获取当前视口的高度
  const viewportHeight = dom2.clientHeight
  // 获取页面的总高度
  const pageWidth = dom2.scrollWidth
  // 获取当前视口的高度
  const viewportWidth = dom2.clientWidth
  // 创建一个用于存储截图片段的数组
  // 创建用于存储截图片段的二维数组,第一维表示垂直方向的切片,第二维表示水平方向的切片
  const screenshots = []

  // 记录当前垂直滚动位置
  let currentScrollTop = 0

  while (currentScrollTop < pageHeight) {
    // 为当前垂直切片创建一个数组,用于存储水平方向的截图片段
    const horizontalScreenshots = []

    // 记录当前水平滚动位置
    let currentScrollLeft = 0

    while (currentScrollLeft < pageWidth) {
      // 使用html2canvas对当前可视区域进行截图
      const canvas = await html2canvasPro(dom, {
        // 设置截图区域为当前可视区域
        windowWidth: viewportWidth,
        windowHeight: viewportHeight,
        scrollX: currentScrollLeft,
        scrollY: currentScrollTop,
        useCORS: true,
        allowTaint: true
      })
      try {
        // 将截图转换为数据URL格式并添加到水平截图片段数组中
        horizontalScreenshots.push(canvas.toDataURL())
      } catch (e) {
        console.error('截图过程出现问题:', e)
      }
      // 滚动内容容器到下一个可视区域(水平方向)
      dom2.scrollTo(currentScrollLeft + viewportWidth, currentScrollTop)
      // 更新当前水平滚动位置
      currentScrollLeft += viewportWidth
    }
    // 将当前垂直切片的水平截图片段数组添加到总的截图片段二维数组中
    screenshots.push(horizontalScreenshots)
    // 滚动内容容器到下一个可视区域(垂直方向)
    dom2.scrollTo(0, currentScrollTop + viewportHeight)
    // 更新当前垂直滚动位置
    currentScrollTop += viewportHeight
  }
  // 获取完整截图的Data URL
  const finalScreenshot = screenshots[1] ? screenshots[0][screenshots[1].length - 1] : [screenshots.length - 1]

  // 创建一个下载链接并触发下载
  const downloadLink = document.createElement('a')
  downloadLink.href = finalScreenshot
  downloadLink.download = 'screenshot.png'
  document.body.appendChild(downloadLink)
  downloadLink.click()
  document.body.removeChild(downloadLink)
}

这种滚动截图比较耗费性能,如果表格过大没有必要使用这种方式。
尝试让后端调用页面截图,使用无头浏览器,节省性能。


http://www.kler.cn/a/392013.html

相关文章:

  • 深入理解接口测试:实用指南与最佳实践5.0(三)
  • jmeter常用配置元件介绍总结之后置处理器
  • vue2或vue3的name属性有什么作用?
  • 数学建模模型算法-Python实现
  • uni-app表单⑪
  • PHP爬虫快速获取京东商品详情(代码示例)
  • 【LeetCode】【算法】240. 搜索二维矩阵II
  • 鸿蒙next版开发:ArkTS组件通用属性(布局约束)
  • QT常用控件
  • 127.WEB渗透测试-信息收集-ARL(18)
  • 自动化爬虫Selenium
  • 【启程Golang之旅】从零开始构建可扩展的微服务架构
  • 算法魅力-二分查找实战
  • 服务号消息折叠折射出的腾讯傲慢:上云会不会也一样?
  • 红日靶机(七)笔记
  • Ue5 umg学习(二)图像控件,锚点
  • 在PHP8内,用Jenssegers MongoDB扩展来实现Laravel与MongoDB的集成
  • 2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)
  • 百度世界2024:AI应用的浪潮时刻
  • 机器情绪及抑郁症算法
  • 【零基础学习CAPL】——XML工程创建与使用详解
  • springboot 之 整合springdoc2.6 (swagger 3)
  • 企望制造ERP系统 drawGrid.action SQL注入致RCE漏洞复现
  • 魅力标签云,奇幻词云图 —— 数据可视化新境界
  • css基础:底部固定,导航栏浮动在顶部
  • UI自动化测试|CSS元素定位实践