【问题标题】:PHP & FPDF: Calculating justified text widthPHP & FPDF:计算对齐的文本宽度
【发布时间】:2011-03-18 04:40:02
【问题描述】:

所以我在 PHP 中使用 FPDF 以编程方式从图像和文本(不是 HTML)生成 PDF 文件。

我遇到的最大问题之一是能够在图像周围自动换行文字。我目前的算法如下:

  1. 以单词数组的形式获取文本
  2. 将单词一次添加到“当前行”变量,并在其上调用 GetStringWidth() 以确定当前行的宽度
  3. 一旦达到预先确定的最大宽度,我会将当前行传递到行数组,然后从新的“当前行”开始。

这样做可以让我得到一个不应该不正确中断的行数组,但是我发现因为我的文本是两端对齐的,所以 GetStringWidth() 不能准确地给我行的宽度这是有道理的。

我已经深入研究了 FPDF 的 MultiCell 方法,试图弄清楚它如何正确地破坏对齐的文本,但不能真正做到正面或反面。它似乎可以归结为类似的算法(并且它使用 Cell 写入每一行)但它实际上似乎从未计算宽度,它写出 PDF“代码”,例如 0.375 Tw

有谁知道如何计算对齐文本的宽度,给定一个字符串和一个最大宽度?

【问题讨论】:

    标签: php text width fpdf justify


    【解决方案1】:

    回答一个非常古老的问题。

    最后,我将进行对齐的函数从库中取出并重写以允许另一个参数,即使在最后一行也能继续对齐文本。

    这将导致特定段落的文本完全对齐,然后您编写不带参数的最后一段并且最后一行不对齐(按照正常情况)。

    【讨论】:

      【解决方案2】:

      不确定这是否有帮助,但我有一个相关的问题 - 需要知道 MultiCell 将占用多少行。

      我通过使用 GetStringWidth() / $maxWidth 并获取 ceil() 来做到这一点。

      然后我可以计算出估计的高度(因为我知道我正在使用的行高)并使用该数字(在我的情况下切换列或不切换)。

      也许将基本文本输入 GetStringWidth() 并以这种方式估计高度将允许您确定将文本分解为多个 MultiCell() 的适当位置。

      【讨论】:

      • 这对您来说有多准确?从我最初的问题来看,我正在做一些具有相同意图的事情(因此我手动“计算”我将要写的行中的单词)
      • 在测试中运行良好!我需要进行一些用户测试来捕捉所有奇怪的情况......但 GetStringWidth() 似乎确实返回了正确的行数。
      猜你喜欢
      • 2016-05-14
      • 2015-05-04
      • 2012-07-26
      • 2010-12-07
      • 1970-01-01
      • 2011-11-25
      • 2010-09-12
      • 2015-02-20
      相关资源
      最近更新 更多