网页内容固定格式打印

关于前端打印


前言

遇到关于前端打印的问题,第一次接触,记录一下我的解决方法和实现思路


提示:以下是本篇文章正文内容,下面案例可供参考

一、实现思路

当我们想要控制打印页面的样式时,我们可以使用 CSS 中的 @page 查询。这个查询允许我们指定打印页面的样式规则,包括页眉、页脚、页码等。在React中,我们可以在

以下是这个示例的实现思路:

设置可打印的内容区域: 我们首先创建一个

元素,给它一个特定的 id(例如 printable-content),并在其中包含我们希望在打印时打印的内容。

准备打印按钮: 我们创建一个按钮(例如 PrintButton 组件),在点击该按钮时调用浏览器的打印功能。

设置打印样式: 在

隐藏页眉和页脚: 在 @page :first 查询中,我们针对第一页打印页面设置样式。我们将页边距设置为零,然后使用 content: none; 将所有的页眉、页脚、页码都设置为不显示,从而隐藏它们。

触发打印: 当用户点击 “打印” 按钮时,我们调用 window.print() 方法,触发浏览器的打印对话框,让用户选择打印机和设置打印参数。

这样,我们就能够通过控制打印页面的样式来实现打印内容的固定格式化

二、实例代码

代码如下(示例):

import React from 'react';

function PrintButton() {
  const handlePrint = () => {
    window.print();
  };

  return (
    <button onClick={handlePrint}>打印</button>
  );
}

// 使用示例
function App() {
  return (
    <div>
      <h1>要打印的内容</h1>
      <p>这是要打印的文本内容。</p>
      <PrintButton />

      {/* 打印样式 */}
      <style type="text/css">
        {`
          @media print {
            body * {
              visibility: hidden;
            }
            #printable-content, #printable-content * {
              visibility: visible;
            }
            #printable-content {
              position: absolute;
              left: 0;
              top: 0;
            }
            @page {
              size: auto;   /* 自动页面尺寸 */
              margin: 0;    /* 无页边距 */
            }
            /* 隐藏打印页面的标题、网址、时间和页码 */
            @page :first {
              margin-top: 0;
              margin-bottom: 0;
              margin-left: 0;
              margin-right: 0;
              @top-center {
                content: none;
              }
              @bottom-center {
                content: none;
              }
              @bottom-left {
                content: none;
              }
              @bottom-right {
                content: none;
              }
            }
          }
        `}
      </style>
      {/* 要打印的内容 */}
      <div id="printable-content">
        <h1>打印的标题</h1>
        <p>这是要以固定格式打印的内容。</p>
      </div>
    </div>
  );
}

export default App;

以上代码是react的写法,不过前端其实都差不多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值