FPDF - 在放置之前确定 MultiCell 的高度?

2024-01-24

基本问题:在将 MultiCell 放入文档之前是否可以确定其高度?

原因:我的任务是创建 PDF 版本的表单。这种形式允许文本输入,并且结果长度可变。一个人可以不输入任何内容,另一个人可以写几段。 “当权者”不希望这段文字在页面之间中断。

目前,在放置每个块后,我检查页面上的位置,如果接近末尾,我会创建一个新页面。

if($this->getY() >= 250) {
    $this->AddPage('P');
}

在大多数情况下,这是有效的。但也有一些偷偷摸摸的,比如 249,然后有大量的文本。在放置块之前确定它的高度以查看它是否真正适合页面似乎更有意义。

当然一定有办法做到这一点,但谷歌搜索并没有被证明很有帮助。

编辑澄清:提交表单后将生成 PDF。不是活动的、可编辑的 PDF 表单...


因这个问题获得了风滚草徽章。 :( 不管怎样,万一有人遇到同样的问题,我想我会用我所做的来回答。我怀疑这是最有效的方法,但它完成了工作。

首先,我创建两个 FPDF 对象;一个永远不会输出的临时文件和最终用户将看到的最终完整的 pdf 文件。

我得到了两个对象当前的 Y 坐标。然后,我使用 Cell() 或 MultiCell()(对于这种形式,通常是两者的组合)将数据块放入临时对象中,然后检查新的 Y 坐标。然后我可以进行数学计算来确定块的高度。 -注意,如果块跨页中断,数学可能会变得有点奇怪。请记住考虑顶部和底部边距。

现在我知道了块的高度,我可以获取目标对象的当前 Y 坐标,从页面的总高度(减去底部边距)中减去它,以获得可用空间。如果该块适合,则放置它,如果不适合,则添加一个页面并将其放置在顶部。

对每个块重复此操作。

我看到的唯一警告是,是否有任何单个块比整个页面长,但使用这种形式,这种情况永远不会发生。 (著名遗言...)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPDF - 在放置之前确定 MultiCell 的高度? 的相关文章

随机推荐

  • 流畅地调用await而不使用括号

    有没有办法重构这条线 var result await Foo Bar 这样它就不会使用括号 也不会将等待结果分配给临时变量 我正在尝试构建一个支持长时间操作的流畅框架 当您需要将 wait 括在括号中时 现实世界的代码会变得非常丑陋 va
  • Python 3 - 从整数转换为“字节”然后连接它们(用于串行传输)

    经过多次毫无结果的搜索 我在理解 Python 3 2 中处理 字节 和十六进制内容的方式时遇到了一个非常具体的问题 我知道我误解了 但似乎无法找到正确的路径 我的最终目标是使用python串行模块来传输字节序列 有些字节是静态的 不会改变
  • 使用 ffmpeg 将视频从 .264 转换为 .265 (HEVC)

    我看到关于这个主题的一些问题 但我仍然收到错误 我想要做的就是将库中的视频转换为 HEVC 以便它们占用更少的空间 我试过这个 ffmpeg i input mp4 c v libx265 output mp4 ffmpeg 似乎需要很长时
  • iOS4进入后台播放音频

    当谈论在后台播放音频时 文档写得相当糟糕 它给人的印象是 要继续播放当前正在播放的音频 您只需将键 值对添加到info plist文件和wallah 这很神奇 然而 这种情况并非如此 例如 如果我播放 2 分钟长的 mp3 显然音频足够长
  • NSCalendar 日差错误

    我正在尝试使用 NSCalendar currentCalendar ordinalityOfUnit NSDayCalendarUnit inUnit NSEraCalendarUnit forDate date 在两个不同的日期查看它们
  • 在 Apache JMeter 中配置响应超时

    我试图检查特定 HTTP 请求的响应时间是否超过 30 秒 如果是 则将其标记为失败并停止线程 有时我可以看到响应时间接近 80 秒 没有浏览器等待服务器响应那么长时间 我发现了以下三种在 JMeter 中设置超时值的方法 但这让我很困惑
  • 每当 gem 时,schedule.rb 中的配置文件与 Rails 一起使用?

    我的 Rails 应用程序的 config 文件夹中有一个名为 config yml 的文件 我还有一个初始化程序 config initializers load config rb 其中包含以下代码 APP CONFIG YAML lo
  • 如何在 Swift 中实现 didReceiveMemoryWarning?

    每当我创建一个新的 View Controller 子类时 Xcode 都会自动添加该方法 override func didReceiveMemoryWarning super didReceiveMemoryWarning Dispos
  • 如何像在 Firefox 的 Firebug 中一样在 Chrome 中编辑 CSS?

    我一直在 Firefox 中使用 Firebug 编辑 CSS 但最近注意到 Chrome 渲染我的页面的速度要快得多 带有滚动 交互元素等 因此想切换到它 我发现 Chrome 显示了计算出的 CSS 以及堆栈中哪些属性被否决 我可以一一
  • 如何使用空间掩模限制光栅处理范围?

    我试图将 MATLAB 中的栅格处理限制为仅包含 shapefile 边界内的区域 类似于 ArcGIS Spatial Analyst 函数使用mask http resources arcgis com en help main 10
  • 在 scikit-learn 中使用 ExtraTreesClassifier 时出错

    我正在尝试在 scikit learn 中对我的数据使用 ExtraTreesClassifier 我有两个 numpy 数组 X 和 y X 的尺寸为 10000 51 y 的尺寸为 10000 为了确保它们采用 numpy 数组格式 我
  • 根据特定文本拆分 XML 节点

    请建议如何根据特定注释文本拆分 xml 节点 我尝试使用xsl 文本禁用输出转义格式以放置所需的结束和开始标记 元素 我的代码是静态的 如何制作动态代码 该代码适用于注释文本方面的任意数量的祖先 即 如果祖先计数 n 然后从n to 1如何
  • 在 Android Studio 中为 NDK 项目构建符号花费太长时间

    我正在开发一个 Android 项目 该项目使用 NDK 并绑定相当大的 Boost C 库 每次启动Android Studio时 IDE在Building Symbols阶段都会花费相当长的时间 大约1个小时 在i7四核机器上或多或少
  • 实体框架、代码优先和全文搜索

    我意识到人们提出了很多与全文搜索和实体框架相关的问题 但我希望这个问题有所不同 我正在使用实体框架 代码优先 需要进行全文搜索 当我需要执行全文搜索时 我通常还会有其他条件 限制 例如跳过前 500 行 或过滤另一列等 我发现这是使用表值函
  • 通过 nginx 访问时,php 在 /tmp/systemd-private-nABCDE/tmp 中有自己的 /tmp

    我发现奇怪的行为php and tmp文件夹 Php 在使用时使用另一个文件夹 tmp PHP 5 6 7 nginx php fpm 我以两种方式执行相同的脚本 通过浏览器和通过 shell 但是当通过浏览器启动时 文件不是真实的 tmp
  • Swift 结构内存泄漏

    我们正在尝试尽可能使用 Swift 结构 我们还使用 RxSwift 它具有采用闭包的方法 当我们有一个结构体创建一个引用的闭包时self 这会创建一个强引用循环 https developer apple com library ios
  • 在TestNG中使用@BeforeMethod时有没有办法获取方法元数据?

    我正在使用 TestNG 并有一套测试 我想在每个需要有关该方法的信息的测试方法之前执行一个操作 举一个简单的例子 假设我想在执行之前打印方法的名称 我可以编写一个带有注释的方法 BeforeMethod 如何将参数注入该方法 看看依赖注入
  • XPath:通过纯文本查找 HTML 元素

    请注意 这个问题是一个更精致的版本上一个问题 https stackoverflow com q 18655765 1839209 我正在寻找一个 XPath 它可以让我在 HTML 文档中查找具有给定纯文本的元素 例如 假设我有以下 HT
  • Python 3+ 在函数调用中导入包?

    随着时间的推移 我已经为各种事情建立了一系列实用函数 我想将它们全部放在包中 其结构比仅包含所有功能的单个文件要多一些 其中一些函数是在假设已导入某些包的情况下编写的 例如我有一些numpy and pandas假设类似的效用函数impor
  • FPDF - 在放置之前确定 MultiCell 的高度?

    基本问题 在将 MultiCell 放入文档之前是否可以确定其高度 原因 我的任务是创建 PDF 版本的表单 这种形式允许文本输入 并且结果长度可变 一个人可以不输入任何内容 另一个人可以写几段 当权者 不希望这段文字在页面之间中断 目前