Конвертировать Long String в многострочную строку в libharu

Я следую и получаю очень длинную строку, которую хочу конвертировать в несколько строк.
На данный момент текст выходит за рамки моего PDF.

int show_data(){

YPOS -= 10;
NextPage();
double ypos = YPOS;
double maxWidth = HPDF_Page_GetWidth(currentpage) - (m_Margin * 2);
double indentStart = 2 * m_Margin;
double xpos = indentStart;
bool thereIsText = (text.length() > 0);
int textPos = 0;
string newText;
while (thereIsText) {
// maxWidth-xpos is the max length of text allowed per line;
newText = text.substr(textPos);
HPDF_TextWidth spacewidth =
HPDF_Font_TextWidth(font, (const HPDF_BYTE *) " ", 1);

HPDF_TextWidth tw =
HPDF_Font_TextWidth(font, (const HPDF_BYTE *) newText.c_str(),
newText.length());textPos += (newText.length() + 1);
HPDF_Page_BeginText(currentpage);
loginfo<<xpos<<ypos<<endl;
HPDF_Page_SetFontAndSize (currentpage, font, 24);
HPDF_Page_SetLineWidth(currentpage, 80);
HPDF_Page_MoveTextPos(currentpage,-220, ypos);
//HPDF_Page_MoveToNextLine
//HPDF_Page_TextOut(currentpage,xpos,ypos, newText.c_str());
//HPDF_Page_MoveTo(currentpage, 120, 195);
//HPDF_Page_MoveTextPos (currentpage, 20, 20);
HPDF_Page_ShowTextNextLine(currentpage, newText.c_str());
HPDF_Page_EndText(currentpage);

if ((unsigned int) textPos >= text.length())
thereIsText = false;

ypos -= 10;
loginfo<<"  ypos ... "<<ypos<<endl;
loginfo<< " m_Margin.... "<<m_Margin<<endl;
/*if (ypos <= m_Margin) {
NextPage();
ypos = HPDF_Page_GetHeight(currentpage) - m_Margin;
}*/
xpos = m_Margin;
}
YPOS = ypos;
}

2

Решение

Что ж, предполагая, что мой комментарий / вопрос к ОП был почти уместным, я понял, что вопрос заключается в том, как вставить очень длинные строки в PDF-документ, сгенерированный libharu, не выходя за границы печати.

Libharu поддерживает текстовые поля (HPDF_Page_TextRect ()), которые создают границу для текста, записанного в них. Он переносит слова (в определении термина «непрофессионал») на полные слова (т. Е. Не вставляет «…» или «-») и выполняет работу довольно хорошо. Все, что вам нужно сделать, это определить размер HPDF_Rect, который вы собираетесь использовать. Конечно, это означает, что вы можете получить слишком маленький размер поля, чтобы вместить весь текст, поэтому вам все равно нужно быть достаточно осторожным при настройке.

С сайта Libharu (https://github.com/libharu/libharu/wiki/API%3A-Graphics#wiki-HPDF_Page_TextRect) вы можете найти формат HPDF_Page_TextRect, но в основном вы даете ему размеры, текст для отображения и пару параметров форматирования / поведения.

Animal451

Вы, наверное, уже ответили на этот вопрос сами.

1

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

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

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