2024年前端最全前端实现打印功能_前端打印,2024年最新最新大厂Web前端社招面试经验汇总

最后

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

// 1、获取需要打印的部分
const  printArea =  this.getElementById(document.body,"rx-form-container");

// 2、引入打印的专有CSS样式
var strStyleCSS="<link href='/rxform.css' type='text/css' rel='stylesheet'>";
var antdesignCSS="<link href='/antdesign.css' type='text/css' rel='stylesheet'>";
let printCSS=" <link href='/print.css' type='text/css'  rel='stylesheet'> ";

// 3、拼接字符串
var strFormHtml=strStyleCSS  +antdesignCSS + printCSS+"<body>"+domEl.innerHTML+"</body>";

// 4、创建 iframe 标签
var iframe = document.createElement('IFRAME');
var doc = null;
iframe.setAttribute('style','position:absolute;width:0;height:0;left:-500px;top:-500px;');

// 5、浏览器插入 iframe
document.body.appendChild(iframe);
doc = iframe.contentWindow.document;
// 引入打印的专有CSS样式
// doc.write("<LINK rel='stylesheet' type='text/css' href='/print.css'>");
doc.write(printHTML);
doc.close();
iframe.contentWindow.focus();

// 注意:等待加载完调用打印,否则样式外联css显示有问题
iframe.contentWindow.addEventListener('load', function() {
    // 6、开始打印
    iframe.contentWindow.print();
    // 7、删除iframe
    document.body.removeChild(iframe);
})

这样写虽然不会影响原页面,但是需要我们把打印的内容及样式用JS来生成,如果打印的内容很多,或者样式很复杂的话,那就是一个大工程,难免不方便,所以如何解决问题呢?我在查度娘的时候,发现了一种方式:将要打印的内容生成一个图片然后放在iframe中,利用html2canvas 生成截图,但是我并未校验(因为本人项目主要是打印表单流程,没有很复杂,嘻嘻),所以,这里我就简单复制一下大佬的,最后也放置了链接,如果有需要也可以去大佬博客看看:

    // 打印账单
    printBill () {
      this.printDisabled = true  // 点击打印按钮禁止重复点击
      setTimeout(_ => {      // 按钮显示为禁止了再去执行截图功能
        html2canvas(this.$refs.reconciliationWrapper, {
          backgroundColor: null,
          scale: 1.3
        }).then((canvas) => {
          let dataURL = canvas.toDataURL('image/png')
          this.$refs.iframe.contentWindow.document.body.innerHTML = ''  // 清空上一次打印的内容
          this.$refs.iframe.contentWindow.document.write('<html><head><style media="print">@page { margin: 0mm 10mm; }body{margin-top: 50px; text-align: center;}</style></head><body><img src=' + dataURL + '></body></html>')
          setTimeout(_ => {
            this.$refs.iframe.contentWindow.print()
          }, 0)
          this.printDisabled = false
        })
      }, 100)
    }

然后将截图放在iframe中的img打印,截图一般会有些模糊,调整html2canvas的参数scale,放大缩小的比例,要根据实际情况调整。

方法三:使用第三方库或插件

除了使用浏览器自带的打印功能外,还可以使用第三方库或插件来实现更高级的打印操作,例如打印指定区域、打印多个页面等。

常用的打印插件有 Print.js、html2canvas、jPrintArea等。这里以 Print.js 为例,演示如何使用该插件实现前端打印功能。

首先,需要在 head 标签中引入 Print.js 插件:

<head>
  <script src="/path/to/Print.js"></script>
</head>

然后,在页面中需要打印的元素上添加 class 属性或 ID 属性:

<div id="print-content">
  <!-- 这里是需要打印的内容 -->
</div>

最后,在触发打印的按钮的点击事件中,使用 Print.js 插件的 printHtml 方法来触发打印操作:

function onPrint() {
  // 获取需要打印的内容
  const content = document.getElementById('print-content').innerHTML;

  // 调用 printHtml 方法触发打印操作
  window.printHtml({
    printable: content,
    onAfterPrint: function() {
      // 打印完成后的操作
    }
  });
}

在上述代码中,我们使用了 window.printHtml 方法来触发打印操作。该方法接受一个配置对象,其中包含需要打印的内容和打印完成后的回调函数。

需要注意的是,使用第三方插件能够提供更为定制化的打印功能,但是在使用前需要对插件的相关文档进行仔细的阅读和熟悉,确保能够正确地使用插件完成打印功能。

提供一个完整的范例:

当用户想要打印页面时,我们可以向用户提供打印功能。而实现页面打印的主要步骤如下:

1. 设计打印布局

在进行打印之前,我们需要首先设计打印布局以确保打印内容能够在有限的纸张大小上清晰地展示。我们需要定义一个专门的打印样式表来控制样式和布局。这个样式表可以包含在主样式表中,也可以在header标签中单独引用。比较重要的是我们需要在这个样式表中使用@media print 来为网页在打印模式下设置独立的样式,以适应打印的需求。因为我们的网页布局和打印页面布局还是有很大的区别,如margin,padding等样式设置等。

可以通过一个简单的示例来说明:

@media print {
    /* 隐藏不必须要打印的元素 */
    header, nav, .no-print {
        display: none;
    }
    /* 修改页面大小和边距 */
    @page {
        size: A4 landscape;
        margin: 20mm 10mm 20mm 10mm;
    }
    
    /*在打印模式下添加样式*/
    .table tr td, .table tr th {
        border: 1px solid #ddd;
        padding: 10px;
    }
    /*自定义打印样式*/
    h1 {
        font-size: 24pt;
        color: blue;
    }
}

在这里我们使用 @media print 创建新的样式,确保要打印的布局不同于网页布局,并提供了一些自定义的打印样式,例如字体大小和颜色。

2. 创建打印版本

实现页面打印的另一个关键步骤是创建一个专门用于打印的版本。可以通过以下方式来实现:

  • 让用户选择打印区域。在这种情况下,我们可以提供一个打印按钮将用户选择的部分发送到打印机。我们可以使用 JavaScript 或 jQuery 将所需的元素捕获并在新窗口中打印。
  • 克隆一个指定的区域。通过使用 clone() 方法,我们可以克隆指定的区域来创建一个专门用于打印的版本,然后在新窗口中打印。

以下是一个通过克隆来创建打印版本的示例:

function createPrintVersion() {
  // 获取需要打印的内容。
  var content = document.getElementById('printContent').cloneNode(true);

  // 添加打印标记,以便于在新窗口中仅打印必要内容。
  var html = '<html><head><title>打印页面</title>' +
      '<style> @media print { /* 此处与上述样式表一样,可以复用 */ } </style></head><body>' +
      content.innerHTML + '</body></html>';

  // 返回新生成的打印版本。
  return html;
}

在这个示例中,我们定义了一个名为createPrintVersion()的函数,用于创建一个专门用于打印的版本。该函数获取需要打印的内容并将其复制到新标签中,然后添加打印标记和打印样式,以便在新窗口中仅打印必要的内容。最后,该函数返回一个新生成的打印版本。

3. 使用JavaScript控制打印

在用户点击“打印”按钮时,我们需要触发打印功能。为此,我们要实现用 JavaScript 创建了一个打印功能呼叫的链接,在单击该链接时执行打印功能。

function printContent() {
  // 创建打印窗口。
  var printWindow = window.open('', 'PrintWindow', 'height=600,width=800');

  // 获取需要打印的内容。
  var content = document.getElementById('printContent').cloneNode(true);

  // 添加打印标记,以便于在新窗口中仅打印必要内容。
  var html = '<html><head><title>打印页面</title>' +
      '<style> @media print { /* 此处与上述样式表一样,可以复用 */ } </style></head><body>' +
      content.innerHTML + '</body></html>';



## 最后

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值