当前位置:首页 > 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 和 Androi…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…