【发布时间】:2011-06-06 17:37:46
【问题描述】:
我正在使用 HTML 生成报告,我正在使用 CSS 来控制使用 page-break-after 等的分页。我为用户提供了一次打印多个报告的选项,我将这些报告创建为单个报告的部分动态生成的 HTML 文档。使其成为单个文档可以使其成为单个打印作业,以避免打印假脱机问题。
我的问题是:我想以“第 x 页,共 n 页”的格式对较大动态 HTML 的一部分的页面进行编号。但是,如果我让打印机这样做,它会(正确地)将文档视为单个文档并对整个文档进行编号。
有什么方法可以确定 CSS 分页符何时会发生,所以我可以在打印之前将它们计算为一个部分,并为长单中的部分添加我自己的编号(例如 HTML 元素)文件?
似乎应该有办法让我做到这一点,但在过去的几天里,我没有找到解决方案,所以我想我会 ping Stackoverflow。
更新:我最终做了什么:
我接受了克里斯托弗的回答,因为虽然我没有完全使用它,但它为我指明了正确的方向。
我最终使用 jQuery 对内容进行了计算,基于打印到的纸张大小、边距、字体大小等,然后添加具有用于分页的 CSS 的分页符元素。我跟踪添加了多少分页符 div,然后在处理完所有内容后更新每个分页符 div 中的 html“page x of n”信息。这让我不必知道一开始会有多少页(感谢 jQuery .each)。
显然这个解决方案存在一些问题:
“第 x 页,共 n 页”元素不会显示为真正的页脚,而是显示在每页内容的底部。在我的情况下,这是一个可以接受的妥协。
拆分本身比页面大的内容元素,特别是考虑到大部分内容是由 php 生成的,有点复杂。我让它工作了,但同样,它需要的假设可能会因打印变化而中断。
计算取决于有关打印纸张大小、边距、字体大小等的假设。在我在 Intranet 上运行的情况下,这又是一个可以接受的折衷方案,因为我可以控制这些选项。可以添加额外的代码来处理未来的一些变化(例如纸张大小)。
这个解决方案虽然不完美而且有点“脆弱”,但解决了我的问题,允许我一次打印多个报告,避免打印机假脱机超时,跟踪并重新启动页码,并避免生成 PDF 作为中间步骤打印。
我发现这是一个非常难以破解的难题,因此我仍然希望对解决方案提出意见和意见。
谢谢!
更新 2:最终解决方案...避免自己的头痛:
虽然我使用这种方法可能比我应该做的更远,并取得了一些小成功,但最终解决方案确实不是一个,因为它最终变得太“脆弱”而无法更改。报告格式的任何更改、添加到现有报告中的新内容、纸张大小等都会破坏计算,并最终导致大量额外的工作!
那么,最终的解决方案是什么? “抵抗是徒劳的!”只需将报告制作为 PDF 格式。如果你愿意,你可以开始“我们告诉过你”的合唱,我可以接受 ;-)
我选择了 TCPDF 库,它非常棒,如果开始有点困难的话。这些例子非常有帮助。现在我对报告进行了完全的自定义,一切都按原样生成。多个报告很容易创建为单个 PDF(防止打印假脱机问题),其页面组允许编号完全按照我的需要工作。
所以,如果您尝试做这样的事情,我建议您切入正题,跳过对 HTML/CSS 类型报告的挫败感,并使用 PDF。
【问题讨论】:
标签: javascript html css printing