当前位置:首页 > React

react 打印实现

2026-01-26 14:12:33React

打印组件内容

使用 react-to-print 库可以轻松实现打印功能。安装依赖后,将需要打印的内容包裹在 ReactToPrint 组件中。通过 trigger 属性指定触发打印的按钮,content 属性绑定需要打印的组件引用。

import React, { useRef } from 'react';
import ReactToPrint from 'react-to-print';

const PrintableComponent = React.forwardRef((props, ref) => {
  return <div ref={ref}>需要打印的内容</div>;
});

function App() {
  const componentRef = useRef();

  return (
    <div>
      <ReactToPrint
        trigger={() => <button>打印</button>}
        content={() => componentRef.current}
      />
      <PrintableComponent ref={componentRef} />
    </div>
  );
}

打印样式控制

通过 CSS 的 @media print 规则可以定制打印时的样式。隐藏不需要打印的元素,调整布局以适应纸张尺寸。确保打印内容在 A4 纸张上正确显示,设置合适的边距和字体大小。

@media print {
  .no-print {
    display: none;
  }
  body {
    margin: 0;
    padding: 10mm;
    font-size: 12pt;
  }
}

打印页面设置

通过 window.print() 方法直接调用浏览器打印功能。在打印前可以动态修改页面内容,打印完成后恢复原始状态。使用 onbeforeprintonafterprint 事件监听打印流程。

function handlePrint() {
  const originalContent = document.body.innerHTML;
  const printContent = document.getElementById('print-area').innerHTML;

  document.body.innerHTML = printContent;
  window.print();
  document.body.innerHTML = originalContent;
}

打印表格数据

对于表格数据的打印,确保表格宽度适应纸张尺寸。使用 page-break-inside: avoid 防止表格跨页断裂。为表格添加边框和背景色,确保打印效果清晰可读。

const PrintableTable = ({ data }) => (
  <table style={{ width: '100%', borderCollapse: 'collapse' }}>
    <thead>
      <tr>
        <th style={{ border: '1px solid black' }}>列名</th>
      </tr>
    </thead>
    <tbody>
      {data.map((row) => (
        <tr style={{ pageBreakInside: 'avoid' }} key={row.id}>
          <td style={{ border: '1px solid black' }}>{row.value}</td>
        </tr>
      ))}
    </tbody>
  </table>
);

打印多页内容

处理多页内容打印时,使用 CSS 的 page-break-beforepage-break-after 控制分页。为每个逻辑部分添加分页符,确保内容按预期分页显示。测试不同浏览器的分页兼容性。

.page-break {
  page-break-after: always;
}

打印预览功能

实现打印预览功能可以通过创建一个隐藏的 iframe,将内容加载到 iframe 中后调用打印。这种方式不会影响主页面内容,同时提供更接近实际打印效果的预览。

function printPreview(content) {
  const frame = document.createElement('iframe');
  frame.style.display = 'none';
  document.body.appendChild(frame);

  frame.contentDocument.write(content);
  frame.contentDocument.close();

  frame.contentWindow.focus();
  frame.contentWindow.print();

  setTimeout(() => document.body.removeChild(frame), 1000);
}

react 打印实现

标签: react
分享给朋友:

相关文章

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高 React Native 允许开发者使用 JavaScript 和 React 编写代码,同时生成 iOS 和 Android 应用,大幅减少开发成…

react 如何执行

react 如何执行

安装 React 确保 Node.js 安装在本地环境中。通过以下命令创建新的 React 项目: npx create-react-app my-app 进入项目目录并启动开发服务器:…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

react 如何执行

react 如何执行

安装 Node.js 和 npm React 开发需要 Node.js 环境,因为它提供了 npm(或 yarn)包管理工具。从 Node.js 官网 下载并安装最新 LTS 版本。安装完成后,在终端…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gr…