TL; DR:我在使用PHP生成PDF文件(共超过一页)时遇到问题.
再次问好.我的目标是创建一个脚本,该脚本将基本上获取所有重要数据,并创建A4格式的PDF发票/文档以进行打印/邮寄/存档.只要文档不溢出,生成PDF文档就可以.
我希望发票页面带有边框,它应该包含:
>发票有效所需的物料
>计费产品/其他信息
>供供应商/客户签名,盖章或其他数据的地方
所有页面必须包含页眉和页脚(公司徽标)和页脚(第#页-发票/文档ID-日期和时间-办公室ID-打印机ID,分配的人员,无论有人问什么),以及周围的边框文档正文(在页眉下方,页脚上方).
只要文档尺寸不大于
$pageSize-$pageMargins-$header-$footer-$invoiceDataBlock-$signaturesBlock
对于实际的发票商品,基本上就像10厘米一样.如果文档较大,我实际上是使用电子表格编辑器手动为发票创建附件的.
问题是:我该怎么做才能创建一个多页PDF文档,而不会出现发票项目覆盖页眉/页脚的问题呢?我需要知道何时继续下一页.我怎么知道完成这项任务的最佳方法是什么?
先感谢您!
解决方法:
使用TCPDF.它具有一对非常方便的SetY()/ GetY()函数,可让您知道页面的位置.您可以使用它来知道何时进行分页.
提示:不要使用页眉/页脚功能-它们笨拙.绘制自己的页眉/页脚.
编辑
从下面的讨论中,这里有一些细节:为避免重叠,您有2种可能性
>使用getStringHeight()并计算
>使用交易
第一个版本是基于这样的事实,即在通常用于生成PDF的所有对象中,唯一的文本流是文本流,您无法事先告知它将使用的高度. getStringHeight()为您提供了足够好的估算,因此在添加元素之前,您知道它是否适合页面(在页脚底部留有足够的空间).因此,基本上,如果您需要首先开始一个新页面,则可以扩展绘图循环以计算每个元素的高度并进行测试.这也允许某种形式的保持在一起,例如如果节标题之后的剩余空间太小,请在此之前开始一个新页面,以使节标题和节正文保持在一起.
第二个版本甚至更容易:在TCPDF中,您可以将事务类似地用于数据库:启动事务,绘制,如果结果不符合您的喜好回滚,则提交.我们发现这是一种性能表现,最终决定是否使用冗长的文字报告,但是2页的发票却是完全不同的野兽.