最近在做一个打印功能,看了很多方法 ,因为打印的模板需求不同,没有找到好的模板,只是自己根据需求画了一个模板,有好用的模板大家可以推荐下。

一.window.print();

二.iframe

三.npm install --save react-to-print

首先:window.print()

如果是局部打印可以通过 document.getElementById("print")?.innerHTML,获取当前要打印的模块,使用这个方法是最简便的,当前页面没有其他操作可以使用这个方法,如果需要打印的页面有“新增”,“删除”,“编辑”等操作,尽量不要使用这个方法,因为当你使用次方法之后你的页面不能操作,需要重新加载才可以正常使用,这个方法,目前我没有找到其他好的方式来解决这个问题

代码实例:

const handlePrint=()=>{

const oldPage = document.body.innerHTML;//首先保存整个页面

const print=document.getElementById("print")?.innerHTML//当前需要打印的部分

document.body.innerHTML = print;//需要打印的页面

window.print();//打印

document.body.innerHTML = oldPage;//还原打印之前的页面

}

其次:iframe

通过这个方法虽然不会导致原页面操作失效,但是样式容易丢失,放在标签上的样式不会应用,需要自己引进样式,样式根据自己项目引入方式去添加

代码示例:

const handleIframe = () => {
//创建iframe
        const iframe = document.createElement('IFRAME');
//获取dom节点 (打印的内容)
        const jubuData = document.getElementById("pront")?.innerHTML;
        let doc = null;
iframe.setAttribute('style', 'position:absolute;width:0;height:0;left:-500px;top:-500px;');
        document.body.appendChild(iframe);
        document.getElementById("pront")?.innerHTML
        doc = iframe.contentWindow.document;
        doc.write(jubuData);
        doc.close();
        iframe.contentWindow.print();
    }

最后:npm install --save react-to-print

地址:react-to-print - npm (npmjs.com)

引入方式 import ReactToPrint from "react-to-print";

在这里,我是封装成一个组件,根据不同的类型,打印不同的模板,因为只是打印,需求没有没有那么复杂,使用的api比较少,这个插件的api方法解释的很详细,可以去研究下。

<div>

<ReactToPrint

content={reactToPrintContent}

documentTitle="AwesomeFileName"

removeAfterPrint

trigger={reactToPrintTrigger}

/>

//自定义组件模板PrintComponent,

<PrintComponent

printType={BILL}

dataSource={dataSource}

printData={printData}

tableFooter={tableFooter}

tableHeader={tableHeader}

ref={setComponentRef}

</div>

//方法可以直接在api的例子拷贝一份

let componentRef: any = null;

const reactToPrintContent = () => {

return componentRef;

};

const setComponentRef = (ref: any) => {

componentRef = ref;

};

const reactToPrintTrigger = () => {

return <Popover content="打印" placement="rightTop" trigger="hover">

<PrinterOutlined style={{ color: '#1890FF' }} />

</Popover>;

};

下面就是预览图片

前端使用print,打印页面功能相关推荐

  1. window.print 打印页面指定区域

    这一阵子由于项目需要,需要在项目某页面下加一个打印的功能,在网上查过之后,知道了window.print 这个函数,这个函数可以很方便的打印当前窗口中的内容, 但是这个有时候并不能满足广大用户的需求: ...

  2. window.print()打印页面 宽度为1000

    使用window.print()得时候 如果Body 没设置宽度 或者为100%得时候 打印页面得宽度 为700~800 多了会被裁掉! 当设置body宽度后 以我这边为例 body 1200px 的 ...

  3. 关于window.print打印分页功能

    平常window.print分页一般打印时用到page-break-after:always; 打印的样式设置在 <style type="text/css" media=& ...

  4. js的window.print打印页面 不打印网页中的“打印”按钮

    设置样式来控制不打印"打印"按钮: <style type="text/css" media="print"> .noprint ...

  5. Python Print打印计时器功能

    1.倒计时 我们仔细看看print的参数:print(value,sep=' ',end='\n',file=sys.stdout,flush=False) 这个value是我们要打印的字符串,sep ...

  6. 前端使用print.js实现打印

    前言 项目中经常会用到前端调用浏览器打印的功能,也经常会遇到一些问题,写这篇文章是为了更好的梳理一下相关内容.下面的内容基于vue. 如果需要用到前端生成二维码可以看我的这篇文章:在vue项目中使用q ...

  7. 使用window.print()打印局部页面,ifrme打印ie报错

    问题: 使用window.print();打印页面,将不需要的数据隐藏,将需要的数据显示,打印完成之后将刚才隐藏的数据还原,显示的数据隐藏, 谷歌浏览器.部分ie能一气呵成,  火狐浏览器以及少数ie ...

  8. window.print()打印网页局部内容

    用window.print()打印网页局部内容 今天客户让添加个打印证照功能,直接用window.print()打印的是整个页面,而用以下方法就可以只打印证明了 <!--window.print ...

  9. 解决打印页面el-table打印不全问题

    起因: 做打印页面功能,页面中有el-table元素,发现弹出来的打印页面,只打印了几个table列,还有好几个列没打印. 然后看代码,用到的方法是: window.print();并不是这个方法错了 ...

最新文章

  1. spark-submit提交python脚本过程记录
  2. java和php优缺点_php和java的优缺点是什么?
  3. Java的poi的excel导入怎么判断日期格式的单元格
  4. 新建Exchange服务器 Outlook端收发邮件报错:0x80040201
  5. AngularJS中关于ng-class和*ngIf指令
  6. 在Visual Studio Code中配置GO开发环境
  7. 文件上传之Apache commons fileupload使用
  8. 最长公共子序列模板(LCS)和LICS模板
  9. ADMT3.2域迁移之Server2003至Server2012系列(五)添加域管理员权限
  10. 名下房产、汽车、存款被查封后,王思聪要筹拍电影了...
  11. 最长重复子字符串:123321||12321
  12. Android修改实战教程(漫放软件)
  13. Raft 为什么是更易理解的分布式一致性算法
  14. flask导出Excel报表详解
  15. 利普希茨连续(Lipschitz continuous)及其应用
  16. 喜马拉雅下载器打赏页面
  17. 【如何高效管理Linkedin账号】
  18. 牛逼了,利用Python实现“天眼系统”,只要照片就能了解个人信息
  19. 【图解】Web前端实现类似Excel的电子表格
  20. Map线程安全几种实现方法

热门文章

  1. vue2 实现鼠标左键拖拽实现框选功能
  2. Eyeshot Ultimate 2021.2 Crack
  3. fsync mysql_使用O_DIRECT_NO_FSYNC来提升MySQL性能
  4. AB PLC使用BOOTP/DCHPSvevr2.3给模块分配IP地址步骤
  5. linux mknod command
  6. 阿里云ECS服务器配置LAMP时安装配置PHP扩展填坑(三)
  7. 软考高级哪个含金量高?哪个最简单?
  8. 也看《我的前半生》:一辈子太长,我们只谈前半生
  9. 提升搜索效率-----使用chatGPT插件让搜索结果直接展示在谷歌界面右侧
  10. 防摔防尘物资塑料周转箱 海格里斯加厚储物仓库物流周转箱