Перенос текста в LibHaru

Я работаю над развитием проекта, связанного с генерацией PDF с использованием LibHaru. Я планирую разместить текст в определенном регионе. я использовал TextRect() для этого, но у меня есть некоторые проблемы с переносом текста.

  1. Если ширина текста больше ширины прямоугольника, прямоугольник становится пустым. Как мне избавиться от этого?
  2. Я попытался написать свою собственную функцию переноса текста или разделенной строки, которая добавляет пробел после определенного количества символов, но даже кажется, что после определенного ограничения происходит сбой. Любая помощь, касающаяся функции переноса текста.
  3. Как мне рассчитать ширину текста, который будет помещаться внутри определенной ширины прямоугольника?

Вот фрагмент кода для функции разделения строк:

void SplitString(int iLength, string strInput, string& strOutput)
{

int iSubstringsCnt;
int iAddedCnt;iSubstringsCnt = strInput.length() / iLength;
iAddedCnt = iSubstringsCnt / iLength;
cout<<iSubstringsCnt<<endl;
cout<<iAddedCnt<<endl;

cout<<strInput.length()<<endl;
for (int iCnt = 0; iCnt <= iSubstringsCnt+ iAddedCnt; iCnt++)
{
if (0 == iCnt)
continue;
strInput.insert((iCnt * iLength)+(iCnt-1) , " ");
}

strOutput= strInput;

}
  • iLength: Длина, после которой я хочу разделить.
  • iAddedCnt: Количество строк после того, как я добавил пробел после нескольких символов.

2

Решение

Libharu — довольно низкоуровневая PDF-библиотека.
Таким образом, он не имеет слишком много параметров форматирования текста, таких как расширенное перенос текста.
Тем не менее, он предлагает вам некоторую помощь:

  • Функция HPDF_Page_TextRect записывает количество напечатанных символов, чтобы вы могли проверить, была ли печать успешной, не проверяя файл pdf;
  • HPDF_Font_TextWidth возвращает ширину текста, который должен быть напечатан (в точках); а также
  • функция HPDF_Font_MeasureText дает количество байтов, которые могут быть напечатаны до заданной ширины (ответы 3).

С помощью этих функций вы можете разбить текст на несколько строк.
Пример (для 2):

  • использование HPDF_Font_MeasureText установить iLength
  • Найдите возможную позицию разрыва строки (например, дефис, точку, двоеточие или пробел), используя strInput.rfind("-",iLength)
  • Если была найдена возможная позиция разрыва строки, вставьте \n в этой позиции; еще: вставьте перевод строки в iLength,

Другая проблема, с которой вы можете столкнуться, это высота коробки.
Если у вас слишком много строк, они не будут напечатаны.
Разбивая ваш текст на несколько строк, вы можете отслеживать необходимое количество строк, в то время как возможное количество строк в блоке определяется высотой блока и межстрочным интервалом (устанавливается HPDF_Page_SetTextLeading).

Если у вас слишком много текста для размера окна, libharu ничего не может сделать. Единственные способы увеличить размер окна и уменьшить размер шрифта (ответы 1).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]