PHP中的多页发票/文档

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页的发票却是完全不同的野兽.

上一篇:十一、迭代器和生成器 2.自定义列表和迭代器


下一篇:SAP MM 事务代码MRKO触发的财务凭证不会出现在PO History里