基本问题:在将 MultiCell 放入文档之前是否可以确定其高度?
原因:我的任务是创建 PDF 版本的表单。这种形式允许文本输入,并且结果长度可变。一个人可以不输入任何内容,另一个人可以写几段。 “当权者”不希望这段文字在页面之间中断。
目前,在放置每个块后,我检查页面上的位置,如果接近末尾,我会创建一个新页面。
if($this->getY() >= 250) {
$this->AddPage('P');
}
在大多数情况下,这是有效的。但也有一些偷偷摸摸的,比如 249,然后有大量的文本。在放置块之前确定它的高度以查看它是否真正适合页面似乎更有意义。
当然一定有办法做到这一点,但谷歌搜索并没有被证明很有帮助。
编辑澄清:提交表单后将生成 PDF。不是活动的、可编辑的 PDF 表单...
因这个问题获得了风滚草徽章。 :( 不管怎样,万一有人遇到同样的问题,我想我会用我所做的来回答。我怀疑这是最有效的方法,但它完成了工作。
首先,我创建两个 FPDF 对象;一个永远不会输出的临时文件和最终用户将看到的最终完整的 pdf 文件。
我得到了两个对象当前的 Y 坐标。然后,我使用 Cell() 或 MultiCell()(对于这种形式,通常是两者的组合)将数据块放入临时对象中,然后检查新的 Y 坐标。然后我可以进行数学计算来确定块的高度。 -注意,如果块跨页中断,数学可能会变得有点奇怪。请记住考虑顶部和底部边距。
现在我知道了块的高度,我可以获取目标对象的当前 Y 坐标,从页面的总高度(减去底部边距)中减去它,以获得可用空间。如果该块适合,则放置它,如果不适合,则添加一个页面并将其放置在顶部。
对每个块重复此操作。
我看到的唯一警告是,是否有任何单个块比整个页面长,但使用这种形式,这种情况永远不会发生。 (著名遗言...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)