当前位置:首页 > 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 中后调用打印。这种方式不会影响主页面内容,同时提供更接近实际打印效果的预览。

react 打印实现

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

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

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react-…

react如何重置

react如何重置

重置 React 应用的状态 使用 useState 钩子重新初始化状态变量是最直接的方法。将状态变量重置为初始值或空值即可完成重置。 const [count, setCount] = useSt…

typescript react 如何

typescript react 如何

TypeScript 与 React 结合使用的方法 在 React 项目中使用 TypeScript 可以提升代码的可维护性和类型安全性。以下是一些关键步骤和最佳实践: 安装 TypeScript…

react如何配置

react如何配置

配置React项目的基本步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过命令行检查版本: node -v npm -v 创建React项目 使用官方工具Creat…