2010-07-20 50 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