【发布时间】:2019-01-31 06:54:32
【问题描述】:
我一直遇到表格中的分页符问题。以为我有一个解决方案,因为它在这个 SO 问题中运行良好:
Inserting a page break into of <table> in React app
这对于只有一列的表格很有效,但现在我正在处理多列,这很混乱。
基本上我必须包含display: block 才能使分页符正常工作,但这使它从格式良好的表格变为:
我已经在 MDN 中列出了列表,只是尝试了任何可行的方法。
https://developer.mozilla.org/en-US/docs/Web/CSS/display
此外,分页符仅在单独的 通过将<tr> 上起作用,这是不可取的,因为它会生成一个空白页面。pagebreak 移动到<tr> 来解决这个问题而不是<td>。
我无法解决这些问题;有关如何解决此问题的任何建议?
不确定 JSFiddle 在打印问题上有多大用处,但这里是编译后的 HTML。我永远无法让 JSFiddle 与 React 一起工作:
https://jsfiddle.net/5gz62d91/
最好的可能是 Github 存储库:
https://github.com/ishraqiyun77/page-breaks
下面是单独的代码:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import styles from '../assets/scss/app.scss';
class PageBreakIssues extends Component {
// Render the data points
renderDataPoint() {
let dataPoint = [];
for (let i = 1; i <= 3; i++) {
let num = (Math.random() * 100).toFixed(2);
dataPoint.push(
<td className='data-point' key={ i }>
{ num < 25 ? null : num }
</td>
)
}
return dataPoint;
}
// Start generating the row data
renderDataRow() {
let dataRow = [];
for (let i = 1; i <= 5; i++) {
dataRow.push(
<tr key={ i }>
<td className='data-name' colSpan='3' key={i}>Test - { i }</td>
{ this.renderDataPoint() }
</tr>
)
}
return dataRow;
}
// Start generating table sections with the section name
// COMMENT THIS OUT TO TRY WITOUT ADDING A BLANK ROW
renderSections() {
let sections = [];
for (let i = 1; i <= 10; i++) {
sections.push(
<tbody key={ i }>
<tr key={ i }>
<td colSpan='7' className='section-name' key={i} >
Section - { i }
</td>
</tr>
{ this.renderDataRow() }
{
i % 2 === 0
?
<tr className='pagebreak'>
<td colSpan='7'></td>
</tr>
:
null
}
</tbody>
)
}
return sections;
}
// Start generating table sections with the section name
// UNCOMMENT THIS SECTION TO TRY WITHOUT INSERT BLANK TR
// renderSections() {
// let sections = [];
// for (let i = 1; i <= 10; i++) {
// sections.push(
// <tbody key={i}>
// <tr key={i}>
// <td colSpan='7' className={ i % 2 === 0? 'section-name pagebreak' : 'section-name'} key={i} >
// Section - {i}
// </td>
// </tr>
// {this.renderDataRow()}
// </tbody>
// )
// }
// return sections;
// }
// Render the table with <th>
render() {
return (
<table>
<thead>
<tr>
<th colSpan='3'>Results</th>
<th>1</th>
<th>2</th>
<th>3</th>
</tr>
</thead>
{ this.renderSections() }
</table>
)
}
}
ReactDOM.render(<PageBreakIssues />, document.getElementById('app'));
@mixin borders {
border: 1px solid black;
}
%borders {
@include borders;
}
table {
border-spacing: 0;
th {
text-align: center;
}
tr {
th{
@extend %borders;
}
td {
@extend %borders;
&.data-name {
padding: 3px 100px 3px 3px;
}
&.data-point {
text-align: center;
padding: 3px 10px;
}
&.section-name {
background-color: #999;
}
}
}
}
@media print {
tr {
display: block;
}
.pagebreak {
break-before: always !important;
page-break-before: always !important;
page-break-inside: avoid !important;
}
}
【问题讨论】: