PHP & FPDF: расчет выравниваемой ширины текста - PullRequest
1 голос
/ 20 июля 2010

, поэтому я использую FPDF в PHP для программного создания файла PDF из изображений и текста (не HTML).

Одна из самых больших проблем, с которыми я столкнулся, - это возможность обернуть текст вокруг изображения. Мой текущий алгоритм выглядит так:

  1. Получить текст в виде массива слов
  2. Добавляйте слова по одному в переменную 'current line' и вызывайте GetStringWidth () для нее, чтобы определить ширину текущей строки
  3. Как только я достигаю предопределенной максимальной ширины, я передаю текущую строку массиву строк и начинаю с новой «текущей строки».

Это позволяет мне получить массив строк, которые не должны нарушаться неправильно, однако я обнаружил, что, поскольку мой текст выровнен по правому краю, GetStringWidth () не может точно дать мне ширину строки, когда это было оправдано.

Я копался в методе FPDF MultiCell, чтобы попытаться выяснить, как он правильно разбивает оправданный текст, но на самом деле не может ни сделать из этого ни головы, ни хвоста. Кажется, что он сводится к аналогичному алгоритму (и он записывает каждую строку, используя Cell), но на самом деле кажется, что он никогда не вычисляет ширину, он записывает «код» PDF, такой как 0.375 Tw.

Кто-нибудь знает, как рассчитать ширину выровненного текста с учетом строки и максимальной ширины?

Ответы [ 2 ]

2 голосов
/ 16 ноября 2012

Ответ на действительно старый вопрос.

В конце я взял функцию, которая выполняет выравнивание, из библиотеки и переписал ее, чтобы учесть другой параметр, который заставляет ее продолжать выравнивать текст даже в последней строке.

Это приведет к тому, что текст будет полностью выровнен для определенного абзаца, после чего вы напишете последний абзац без параметра, а последняя строка будет неоправданной (как обычно).

0 голосов
/ 23 июля 2010

не уверен, поможет ли это, но у меня есть связанная проблема - мне нужно знать, сколько строк займет MultiCell.

Я сделал это, используя GetStringWidth () / $ maxWidth и получив ceil () этого.

Затем я могу рассчитать предполагаемую высоту (поскольку я знаю высоту строки, которую я использую) и использовать эту цифру (в моем случае, для переключения столбцов или нет).

Возможно, подача базового текста в GetStringWidth () и оценка высоты таким образом позволят вам определить подходящее место для разбивки текста на несколько MultiCell ().

...