Terminé siguiendo el enfoque de @ vicenteherrera, con algunos ajustes (que posiblemente sean específicos de bootstrap 3).
Básicamente; no podemos romper trs, o tds porque no son elementos de nivel de bloque. Así que incorporamos divs en cada uno y aplicamos nuestras page-break-*reglas contra el div. En segundo lugar; agregamos un poco de relleno en la parte superior de cada uno de estos divs, para compensar los artefactos de estilo.
<style>
@media print {
/* avoid cutting tr's in half */
th div, td div {
margin-top:-8px;
padding-top:8px;
page-break-inside:avoid;
}
}
</style>
<script>
$(document).ready(function(){
// Wrap each tr and td's content within a div
// (todo: add logic so we only do this when printing)
$("table tbody th, table tbody td").wrapInner("<div></div>");
})
</script>
Los ajustes de margen y relleno fueron necesarios para compensar algún tipo de inquietud que se estaba introduciendo (supongo, desde bootstrap). No estoy seguro de presentar una nueva solución de las otras respuestas a esta pregunta, pero creo que quizás esto ayude a alguien.
<thead>a su tabla con el siguiente CSSthead {display: table-header-group; }para imprimir el encabezado de la tabla en todas las páginas posteriores (útil para taaaaaaaaaaaa tablas de datos).