CSS 페이지 나누기를 적용하여 행이 많은 표를 인쇄하는 방법은 무엇입니까?
내 웹 페이지에 때때로 많은 행을 포함하는 동적 테이블이 있습니다. 나는 거기 알고 page-break-before
및 page-break-after
CSS 속성. 필요한 경우 페이지를 강제로 나누기 위해 코드에 어디에 두어야합니까?
다음을 사용할 수 있습니다.
<style type="text/css">
table { page-break-inside:auto }
tr { page-break-inside:avoid; page-break-after:auto }
</style>
자세한 내용은 W3C의 CSS 인쇄 프로필 사양을 참조하십시오.
또한 Salesforce 개발자 포럼을 참조하십시오 .
휴식을 적용하려면 a table
또는 tr
, ex에 대한 클래스를 제공해야합니다. page-break
아래와 같이 CSS로 :
/* class works for table row */
table tr.page-break{
page-break-after:always
}
<tr class="page-break">
/* class works for table */
table.page-break{
page-break-after:always
}
<table class="page-break">
필요에 따라 작동합니다.
또는 div
동일한 구조를 가질 수도 있습니다 .
CSS :
@media all {
.page-break { display: none; }
}
@media print {
.page-break { display: block; page-break-before: always; }
}
사업부 :
<div class="page-break"></div>
나는 이것에 대한 수정을 둘러 보았습니다. 최종 인쇄 페이지가 있고 수십 페이지를 결합한 jquery 모바일 사이트가 있습니다. 위의 모든 수정 사항을 시도했지만 작업 할 수있는 유일한 방법은 다음과 같습니다.
<div style="clear:both!important;"/></div>
<div style="page-break-after:always"></div>
<div style="clear:both!important;"/> </div>
불행히도 위의 예는 Chrome에서 작동하지 않았습니다.
각 페이지의 PX에서 최대 높이를 지정할 수있는 아래 솔루션을 생각해 냈습니다. 그러면 행이 해당 높이와 같을 때 테이블이 별도의 테이블로 분할됩니다.
$(document).ready(function(){
var MaxHeight = 200;
var RunningHeight = 0;
var PageNo = 1;
$('table.splitForPrint>tbody>tr').each(function () {
if (RunningHeight + $(this).height() > MaxHeight) {
RunningHeight = 0;
PageNo += 1;
}
RunningHeight += $(this).height();
$(this).attr("data-page-no", PageNo);
});
for(i = 1; i <= PageNo; i++){
$('table.splitForPrint').parent().append("<div class='tablePage'><hr /><table id='Table" + i + "'><tbody></tbody></table><hr /></div>");
var rows = $('table tr[data-page-no="' + i + '"]');
$('#Table' + i).find("tbody").append(rows);
}
$('table.splitForPrint').remove();
});
스타일 시트에 아래 항목도 필요합니다.
div.tablePage {
page-break-inside:avoid; page-break-after:always;
}
이것은 나를 위해 일하고 있습니다.
<td>
<div class="avoid">
Cell content.
</div>
</td>
...
<style type="text/css">
.avoid {
page-break-inside: avoid !important;
margin: 4px 0 4px 0; /* to keep the page break from cutting too close to the text in the div */
}
</style>
이 스레드에서 : 테이블 행 내부에서 페이지 나누기 방지
한 페이지에 원하는 수를 알고 있다면 언제든지이 작업을 수행 할 수 있습니다. 매 20 번째 항목마다 새 페이지가 시작됩니다.
.row-item:nth-child(20n) {
page-break-after: always;
page-break-inside: avoid;
}
다음은 그 예입니다.
CSS를 통해 :
<style>
.my-table {
page-break-before: always;
page-break-after: always;
}
.my-table tr {
page-break-inside: avoid;
}
</style>
또는 요소에서 직접 :
<table style="page-break-before: always; page-break-after: always;">
<tr style="page-break-inside: avoid;">
..
</tr>
</table>
당신은 사용해야합니다
<tbody>
<tr>
first page content here
</tr>
<tr>
..
</tr>
</tbody>
<tbody>
next page content...
</tbody>
그리고 CSS :
tbody { display: block; page-break-before: avoid; }
tbody { display: block; page-break-after: always; }
'Programing' 카테고리의 다른 글
인터페이스를 사용하는 이유는 무엇입니까? (0) | 2020.11.05 |
---|---|
C #에서 (디렉터리) 경로를 어떻게 비교할 수 있습니까? (0) | 2020.11.04 |
다른 쉘 스크립트에서 쉘 스크립트의 함수를 호출 할 수 있습니까? (0) | 2020.11.04 |
HashMap 값이 목록에 캐스팅되지 않는 이유는 무엇입니까? (0) | 2020.11.04 |
prettier-eslint, eslint-plugin-prettier 및 eslint-config-prettier의 차이점은 무엇입니까? (0) | 2020.11.04 |