Coldfusion - 动态分页符

时间:2013-09-17 16:39:36

标签: printing coldfusion

我的表单有一个表,可能包含0行或多行。 问题是,如果有多行我想要在内容溢出到下一页之前关闭第一页上的表。然后为下一页上的其余行创建另一个表以及一个漂亮的标题和表标题。困难的部分是,因为字符具有不同的宽度而我无法预测用户将键入的内容,因此很难计算一行中可容纳的字符数以及页面上可容纳的行数。此外,如果用户在某些行数据中键入内容,则会将其换行到第2行。 当行只有几行时,打印输出看起来很糟糕,因为底部有很多空白,所以我想添加空白行来填充它。但同样,我不知道在溢出到下一页之前我需要填充多少行。 有人有解决方案吗?

编辑:

很抱歉。为了更清楚我正在做什么,我使用CF和HTML创建了一个表单视图,它在视觉上模仿纸质发票。可以通过AJAX动态添加发票行项目。有一堆信息要填写在顶部(公司名称,地址等),然后在中间有一个带有列标题的表格中的发票行,然后在其下面填写更多信息,包括签名字段。此格式无法更改,因为这是一项要求。

所以表单布局是:

顶部(包括客户信息和其他一些信息的信息)

中间部分(发票行项目表)

底部(一系列其他信息,包括签名字段)

在页面上可视化维护上述格式,如果添加了大量发票行项目,页面只会滚动,底部部分仍然在最后。

可以添加无限数量的发票行,因此如果您只是打印页面,发票行将溢出到下一页,包含签名的“底部信息”将显示在最后一页的任何页面上,是不受欢迎的。 我需要它,以便第一页上可以放在第一页上的任何数量的行都可以显示在第一页上,并显示包含签名的“底部信息”。额外的行显示在下一页上,标题为“续页”以及发票行的表格列标题。

我的解决方案是创建一个“打印视图”,使用输入的信息创建表单,然后cfloops发票行查询,但只循环足以填充第一页。如果添加另一行使表单溢出,那么我将停止循环,使用“底部信息”和签名显示表单的其余部分,以便它很好地适合第一页,然后使用标题执行分页符“ “Coninuation Page”并显示包含列标题和发票行项目其余部分的发票行表。当然,如果继续页面溢出,那么我需要进行分页并重复“延续页面”过程。棘手的部分是如何确定页面上实际可以容纳多少行,因为每行中的数据长度根据用户输入而变化。也许只有一个填充了大量数据的发票行所有可以放在第一页上而没有表格溢出。输入少量数据时,可能是10个发票行。

我的主要目的是将整个表单保留在第一页上。如果添加了几个将表单底部推到下一页的发票行项目,那么我想只显示足够的发票行,以便将表单保留在第一页上,并为其余的发票行设置一个续页不适合后续页面。

注意:打印是通过表单页面上的打印链接完成的,该链接在另一个窗口中弹出打印视图页面(没有站点标题等)。从那里,他们可以从浏览器打印或点击进行javascript打印的打印链接。我创建的用于打印发票的相同“打印视图”也用于使用CFDocument创建的PDF视图。生成的PDF中每行的字符数与HTML打印视图不同,因此更难确定可以容纳的行数。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,那么使用CFDocument生成的PDF似乎是最佳解决方案。使用cfdocumentitem标记,您可以指定页眉和页脚,以确保您想要的内容出现在第一页上。 cfdocument.currentpagenumber变量可用于确保它仅出现在第1页上,并且第2页上的标题显示您想要的“Continuation Page”文本。还有一种方法可以使用DDX文件自动打印PDF,但这受到安全限制。

您提到使用CFDocument创建单独的打印视图,但我没有看到为什么还需要HTML版本的解释。如果我错过了,我道歉。

根据去年类似项目的个人经验,我倾向于建议不要使用CSS,而只需要一个PDF阅读器。有能力比我更有技巧的人可能会让它变得容易起作用,但这对我们来说只不过是令人头痛的事情,我们永远无法使它正常工作。