Я работаю над развитием проекта, связанного с генерацией PDF с использованием LibHaru. Я планирую разместить текст в определенном регионе. я использовал TextRect()
для этого, но у меня есть некоторые проблемы с переносом текста.
Вот фрагмент кода для функции разделения строк:
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
: Количество строк после того, как я добавил пробел после нескольких символов.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).
Других решений пока нет …