2010-07-20 73 views
1

所以我在PHP中使用FPDF以编程方式从图像和文本(不是HTML)生成PDF文件。PHP和FPDF:计算合理的文本宽度

我一直以来遇到的最大问题之一是能够对图像进行文字换行。我的当前算法看起来像:

  1. 获取文本作为数组字
  2. 在一个时间添加词语一个为“当前行”的变量,并在其上调用GetStringWidth()来确定当前的宽度行
  3. 一旦达到预定的最大宽度,我将当前行传递给一行行,并开始新的“当前行”。

这样做可以让我得到一个不应该突破的行数,但是我发现由于我的文本是对齐的,GetStringWidth()不能准确地给我宽度当它被证明是合理的时候。

我已经深入研究了FPDF的MultiCell方法,试图找出它是如何正确打破正确的文本,但不能真正做到正面和反面。它似乎归结为一个类似的算法(并且它使用Cell写入每行),但它似乎从不计算宽度,它写出PDF“代码”,如0.375 Tw

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

回答

2

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

最后,我从函数库中提取出了函数,并将其重写为允许另一个参数,即使在最后一行中也可以继续验证文本。

这将导致文本被完全证明特定的段落,然后您写入没有参数的最后一段,并且最后一行没有正当性(按照正常情况)。

0

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

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

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

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

+0

这对你有多准确?从我原来的问题来看,我正在做一些具有相同意图的事情(据此我手动“计算”我将写入的行中的单词) – 2010-07-25 23:44:52

+0

在测试中运行良好!我需要进行一些用户测试来捕获所有奇怪的情况......但GetStringWidth()似乎返回了正确的#行。 – realcals 2010-07-27 04:47:14