
使用嵌套 ng-repeat 渲染多层数据时,若采用 结构进行布局,浏览器在打印模式下可能因 HTML 表格语义不合规(如缺失必要层级或非法嵌套)导致生成多余空白页;根本解法是弃用表格标签,改用语义化 + CSS 布局。
使用嵌套 `ng-repeat` 渲染多层数据时,若采用 `

<div class="container-fluid print-report">
<!-- 页眉区域(每页固定) -->
<header class="page-header"><div class="logo">@@##@@</div>
<div class="header-text">
<span>Room Booking Details with Add-ons</span><br>
{{ reportContent.business_team }}
</div>
<div class="address">xxx<br>xxx<br>xxx</div>
<div class="column-header">
<span>Start</span>
<span>End</span>
<span>Items</span>
<span>Item comments</span>
</div>
</header><!-- 主体数据区域(支持分页) --><main class="report-body"><div ng-repeat="date in reportContent.dates track by $index">
<h2 class="date-banner">{{ date.value }}</h2>
<section class="reservation" ng-repeat="reservation in date.reservations track by $index"><div class="room-subject">
<span>{{ reservation.location }}</span>: {{ reservation.subject }}
</div>
<div class="name-attendees">
<span>{{ reservation.requested_for }}</span>
<span class="text-right">{{ reservation.attendees }} Attendees</span>
</div>
<div class="additional-info">
<p ng-bind-html="reservation.additional_info"></p>
</div>
<div class="service-items" ng-repeat="item in reservation.service_items">
<span>{{ item.start }}</span>
<span>{{ item.end }}</span>
<span>{{ item.quantity }} x {{ item.category }} - {{ item.name }}</span>
<span ng-class="{empty: !item.comment}">{{ item.comment }}</span>
</div>
</section>
</div>
</main><!-- 页脚占位符(用于 CSS @page margin-bottom) --><footer class="page-footer-space"></footer>
</div>
<!-- 独立页脚(每页底部显示) -->
<footer class="page-footer"><span>Generated: {{ reportContent.meta.run_date }}</span>
<span>From {{ reportContent.meta.from }} to {{ reportContent.meta.to }}</span>
<span>Room Booking Details with Add-ons for {{ reportContent.business_team }}</span>
</footer>
@media print {
.print-report { page-break-inside: avoid; }
.date-banner { break-before: page; } /* 每个日期从新页开始(可选) */
.reservation { break-inside: avoid; } /* 避免跨页截断单条预订 */
.page-footer { position: fixed; bottom: 0; width: 100%; }
}










