vue3+ts--实际开发之--table表格打印或者保存

news2024/11/17 17:26:11

vue3实现指定区域打印(导出)功能-主要是解决分页内容分割问题

    • 一、 问题页面效果
    • 二、 Print.js相关属性 和使用
      • 1. 介绍
      • 2. 安装引入
      • 3. PrintJS参数配置表
    • 三 、解决关于分页文字或者表格被分割问题,解决后如下:
      • 1. 设置一个自定义table
      • 2. 运行后效果:
      • 3. 添加导出打印js
      • 4.解决后导出打印效果
  • 四、 element-ui中使用 待更新.......

一、 问题页面效果

  1. 实现功能:自定义table表格包含行和列的合并,要求保持css样式不懂能直接导出打印成A4
  2. 常见问题:能实现生成图片导出唤起打印窗口,但是会出现文字分列被分割问题,如下两种被分割情况(文字被分割或者行被分割):

在这里插入图片描述
在这里插入图片描述

二、 Print.js相关属性 和使用

1. 介绍

官网https://printjs.crabbly.com

一个小的javascript库,帮助从web打印和保存。在应用程序中直接打印PDF文件而编写的,不需要离开界面,也不需要使用嵌入。

2. 安装引入

使用npm安装:

  npm install print-js --save

使用纱线安装:

  yarn add print-js

引入:

import printJS from "print-js";

3. PrintJS参数配置表

浏览器翻译的 也可以自己去官网查看https://printjs.crabbly.com

参数默认值描述
printablenull文档来源:pdf或图像url, html元素id或json数据对象。
type‘pdf’可打印类型。可用的打印选项有:pdf, html, image, json和raw-html。
headernull可选标题与HTML、图像或JSON打印一起使用。它将被放置在页面顶部。此属性将接受文本或原始HTML。
headerStyle‘font-weight: 300;’可选的标题样式应用于标题文本。
maxWidth800最大文档宽度(以像素为单位)。根据需要进行更改。打印HTML、图像或JSON时使用。
cssnull这允许我们传递一个或多个css文件URL,这些URL应该应用于正在打印的html。值可以是具有单个URL的字符串或具有多个URL的数组。
stylenull这允许我们传递一个具有自定义样式的字符串,该字符串应应用于正在打印的html。
scanStylestrue当设置为false时,库将不会处理应用于正在打印的html的样式。使用css参数时很有用。
targetStylenull默认情况下,在打印HTML元素时,库仅处理某些样式。此选项允许您传递要处理的样式数组。例如:[‘padding-top’,‘border-bottom’]
targetStylesnull与“targetStyle”一样,这将处理任何一系列样式。例如:[‘border’,‘padding’],将包括’border-bottom’,‘border-top’,‘border-left’,‘border-right’,‘padding-top’等。您也可以传递[’*']来处理所有样式。
ignoreElements[]接受打印父html元素时应忽略的html ID数组。
propertiesnullJSON时使用。这些是对象属性名称。
gridHeaderStyle‘font-weight: bold;’JSON数据时,网格标头的可选样式。
gridStyle‘border: 1px solid lightgray; margin-bottom: -1px;’JSON数据时网格行的可选样式。
repeatTableHeadertrueJSON数据时使用。当设置为false时,数据表标题将仅显示在第一页中。
showModalnull此选项以在检索或处理大型PDF文件时显示用户反馈。
modalMessage‘Retrieving Document…’当showModal设置为true,向用户显示的消息。
onLoadingStartnull加载PDF时要执行的函数
onLoadingEndnull加载PDF后要执行的功能
documentTitle‘Document’打印html、图像或json时,这将显示为文档标题。
fallbackPrintablenull打印pdf时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开pdf。这允许您传递要打开的不同pdf文档,而不是以“可打印”方式传递的原件。如果您在备用pdf文件中注入javascript,这可能会很有用。
onPdfOpennull打印pdf时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开pdf。可以在这里传递一个回调函数,当发生这种情况时,该函数将被执行。在某些情况下,当您想处理打印流程、更新用户界面等时,它可能会很有用。
onPrintDialogClosenull浏览器打印对话框关闭后执行回调功能。
onErrorerror => throw error文档来源:pdf或图像url, html元素id或json数据对象。
base64null文档来源:pdf或图像url, html元素id或json数据对象。

三 、解决关于分页文字或者表格被分割问题,解决后如下:

在这里插入图片描述

⚠️ 注意 ⚠️ :此方法只适用于原声table使用,因为禁止行内分页属性不能绝对定位使用,一般的el-table等组件里边有使用定位
在这里插入图片描述

1. 设置一个自定义table


  <!-- html -->
  <el-button @click="generateImage">导出唤起打印</el-button>
  <table id="tableDataDayin">
    <tr>
      <th rowspan="2">Name</th>
      <th colspan="2">Details</th>
    </tr>
    <tr>
      <th>Age</th>
      <th>Address</th>
    </tr>
    <tr>
      <td>John</td>
      <td>30</td>
      <td rowspan="2">New York</td>
    </tr>
    <tr>
      <td>Jane</td>
      <td>25</td>
    </tr>
    <tr v-for="index in 16" :key="index">
      <td>Jane</td>
      <td>25</td>
      <td>
        New减肥还得好几个返回结核杆菌快递发货个i哦怕u分9外俄文i哦额UI日哦额回个i哦怕u分9外俄文i哦额UI日哦额回复{{
          index
        }}
      </td>
    </tr>
    <tr>
      <td>John</td>
      <td>30</td>
      <td rowspan="3">New York</td>
    </tr>
    <tr>
      <td>Jane</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Jane</td>
      <td>25</td>
    </tr>
    <tr>
      <td>John</td>
      <td>30</td>
      <td rowspan="2">New York</td>
    </tr>
    <tr>
      <td>Jane</td>
      <td>25</td>
    </tr>
  </table>
<!-- css -->
#tableDataDayin {
  border-collapse: collapse;
  width: 100%;
}

#tableDataDayin th {
  background-color: #f2f2f2;
  border: 1px solid #ddd;
}

#tableDataDayin td {
  border: 1px solid #ddd;
  padding: 8px;
}

#tableDataDayin th,
#tableDataDayin td {
  text-align: left;
  page-break-inside: avoid !important; //主要就是这个属性 禁止行内分页
}

#tableDataDayin tr:nth-child(odd) {
  background-color: #f7f7f7;
}

#tableDataDayin tr:nth-child(even) {
  background-color: #f2f2f2;
}

2. 运行后效果:

在这里插入图片描述

3. 添加导出打印js

<!-- js -->
<script setup lang="ts">
import printJS from "print-js";

const generateImage = () => {
  printJS({
    printable: "tableDataDayin", //table表格 id
    type: "html", // 类型
    targetStyles: ["*"],
  });
};
</script>

4.解决后导出打印效果

在这里插入图片描述

四、 element-ui中使用 待更新…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1658105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机端如何生成gif?一个方法在线转换gif

当我们看到网络上好看个性的gif动画表情包的时候是不是也很想自己制作呢&#xff1f;很多小伙伴都不知道要怎么在手机上制作gif动图吧&#xff01;下面&#xff0c;给大家分享一款操作简单无需下载的动态图片在线制作&#xff08;https://www.gif.cn/&#xff09;的操作工具&am…

巨资回流,量子投资热潮再起

一股新的信心和资金浪潮正在席卷量子计算产业。 2023年4月30日&#xff0c;澳大利亚联邦政府和昆士兰州政府宣布共同出资9.4亿澳元&#xff08;约合6.2亿美元&#xff09;&#xff0c;支持美国初创企业PsiQuantum在布里斯班附近建设一台大型量子计算机。这项投资是最新的迹象之…

【OceanBase诊断调优】—— 磁盘性能问题导致卡合并和磁盘写入拒绝排查

适用版本 OceanBase 数据库 V3.x、V4.x 版本。 问题现象 OceanBase 集群合并一直未完成&#xff0c;同时 tsar 和 iostat 显示从凌晨 2:30 开始磁盘使用率一直是 100%。怀疑合并导致 IO 上升&#xff0c;IO 可能存在问题&#xff0c;observer.log 的确有大量报错 disk is hu…

哪里有高清视频素材网站?有没有视频素材网站?

在这个数字内容不断演化的时代&#xff0c;寻找优质的视频素材是每个创作者的必经之路。尤其是可商用和高清素材&#xff0c;它们对提升作品的视觉效果和吸引力至关重要。以下介绍几个国际知名的视频素材网站&#xff0c;旨在帮助您找到理想的视频资源。 1. 蛙学府 为订阅者提…

AOF持久化是怎么实现的?

AOF持久化是怎么实现的&#xff1f; AOF 日志三种写回策略AOF 重写机制AOF 后台重写总结参考资料 AOF 日志 试想一下&#xff0c;如果 Redis 每执行一条写操作命令&#xff0c;就把该命令以追加的方式写入到一个文件里&#xff0c;然后重启 Redis 的时候&#xff0c;先去读取这…

MySQL——变量的浮点数问题处理

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL #MySQL变量的浮点数问题处理 set dx3.14,dy3.25; select dxdy;#计算显示异常&#xff0c;会有很多00000的提示set resultdxdy; select result; 查询结果

HTML5/CSS3粒子效果进度条 超炫酷进度条动画源码

特效介绍 之前我已经分享了几款效果很不错的CSS3进度条插件&#xff0c;比如CSS3 Loading进度条加载动画特效、CSS3 3D进度条按钮 18款精美样式。今天我再来分享一款很有特色的HTML5/CSS3进度条应用。这款进度条插件在播放进度过程中出现粒子效果&#xff0c;就像一些小颗粒从…

C++进阶:map与set简单自实现

目录 1. map与set封装红黑树的方式1.1 大概实现思路1.2 红黑树模板抽象1.3 红黑树的迭代器 2. 红黑树模板的实现2.1 结点结构的定义2.2 红黑树迭代器的实现2.2.1 迭代器的结构2.2.2 迭代器的方法实现 2.3 树结构的定义2.4 红黑树接口实现2.4.1 插入2.4.2 查找2.4.3 迭代器相关 …

python3有serial库吗

一、概述 pyserial模块封装了对串口的访问。 二、特性 在支持的平台上有统一的接口。 通过python属性访问串口设置。 支持不同的字节大小、停止位、校验位和流控设置。 可以有或者没有接收超时。 类似文件的API&#xff0c;例如read和write&#xff0c;也支持readline等…

利用大语言模型(KIMI)生成OPC UA 信息模型

在大语言模型没有出现之前&#xff0c;人们更倾向使用图形化工具或者基于窗口的软件来构建信息模型&#xff0c;图形化工具能够直观地表达信息模型中各元素之间的相互关系。但是图形化工具也有缺点&#xff0c;当描述一个复杂的信息模型时&#xff0c;图形会变得非常复杂和庞大…

Hibernate认识

一、定义 Hibernate 是一种开源的 Java 对象关系映射 (ORM) 框架&#xff0c;用于将面向对象的领域模型持久化到关系数据库中。它为开发人员提供了一种简便的方法来操作数据库&#xff0c;而无需编写繁琐的 SQL 代码。 ORM&#xff08;对象关系映射&#xff09;&#xff1a;Ob…

【XR806开发板试用】SPI驱动数码管显示

准备工作 安装repo 创建repo安装目录。 mkdir ~/bin下载repo wget https://storage.googleapis.com/git-repo-downloads/repo -P ~/bin/改变执行权限 chmod ax ~/bin/repo设置环境变量&#xff0c;在~/.bashrc文件的最后输入 export PATH~/bin:$PATH和export REPO_URLhttps://…

ANSI转义序列

一、ASCII码 ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;最初的设计是一个7位的字符编码&#xff0c;使用了从0到127的数字来表示字符。这意味着它总共可以表示128个不同的字符。这包括了英文大小写字…

[鸟哥私房菜]4.首次登录与在线求助

第4章 首次登录与在线求助 4.1.3 X Window 与命令行模式的切换 通常我们称命令行界面为终端界面、Terminal 或 Console。Linux 默认的情况下会提供六个终端&#xff08;Terminal&#xff09;来让用户登录&#xff0c; 切换的方式为使用&#xff1a;[Ctrl] [Alt] [F1]~[F6] …

Joplin:自由、安全、多功能的笔记应用

什么是 Joplin&#xff1f; Joplin是一款免费、开源的笔记和待办事项应用程序&#xff0c;可以处理整理到笔记本中的大量笔记。这些笔记是可搜索的&#xff0c;可以直接从应用程序或从您自己的文本编辑器中复制、标记和修改。笔记采用Markdown 格式 功能亮点 功能丰富&#x…

超标量处理器设计:重排序缓存(ROB)

★超标量处理器的很多地方用到了重排序缓存&#xff0c;但是我对它不是很了解&#xff0c;所以我整理一下重排序缓存的知识点。 重排序缓存(ROB)在确保乱序执行的指令能够正确地完成和提交(Commit)&#xff0c;也可以用来寄存器重命名。 ROB是一个先进先出的表&#xff0c;每个…

基于Springboot的线上教学平台

基于SpringbootVue的线上教学平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 学习资料 交流论坛 试卷列表 公告信息 后台登录 后台首页 学员管理 资料类型…

深入理解Linux中TCP/IP协议栈的实现原理与具体过程

一、Linux内核与网络体系结构 在我们了解整个linux系统的网络体系结构之前&#xff0c;我们需要对整个网络体系调用&#xff0c;初始化和交互的位置&#xff0c;同时也是Linux操作系统中最为关键的一部分代码-------内核&#xff0c;有一个初步的认知。 1、Linux内核的结构 …

pytest教程-43-钩子函数-pytest_report_header

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_runtest_makereport钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_report_header钩子函数的使用方法。 pytest_report_header 钩子函数允许你在 pytest 的终端报告的头部添…

系统运维(虚拟化)

1.VLAN VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。 每个VLAN是一个广播域&#xff0c;VLAN内的主机间可以直接通信&#xff0c;而VLAN间则不能直接互通。这样&#xff0c;广播报…