好的,我花了一天左右的时间来解决这个问题,所以我想发布我的解决方案,以防其他人需要答案。
一般来说,这就是我所做的。
- 正常生成输出(不是打印机预期的)
- 创建了 2 个样式表(一个用于打印机,一个用于屏幕)。对于所有要转换为打印输出的页面元素,测量值以英寸(而不是像素)为单位。
- 使用 jQuery,我做了以下事情:
-> 调用将初始页面附加到 DOM 的函数 - 类似这样
// assumes old_page_id is existing element in DOM, and var page_id = 1;
$j("<div class='page' id='" + page_id + "'><div class='print_area'></div></div>")
.insertAfter('#' + old_page_id);
-> 测量作为页面的 div 的高度(在我的例子中是 $('.page').height(); )
-> 运行一个函数来插入 div 和新页面 - 像这样
$('div_class').each(
function() {
// measure height of $(this)
// add it to running total of used space on existing page
// if sum total exceeds remaining space, create new page, and add to that one
// if still room left, add to this one
}
);
请注意,打印机样式表中的每个页面 div(在我的例子中,class='page')都有这个:
分页后:总是;
这就是我如何在我想要的打印机上创建一个新页面的方法。
运行上面的 jQuery 函数后,我隐藏了包含要移动到打印页面中的 div 元素的原始部分。请注意,我无法事先隐藏此部分,因为我的 jQuery 测量不会产生有效结果(在我的情况下,我将所有 div 放在一个 div 包装器中,id 为' hide_me ',并将样式设置为height:1px;溢出:自动;)。
我意识到这是非常 50,000 英尺的视图,但希望它对您有所帮助。