我有以下内容,并且得到的行很长,想要转换成多行。
截至目前,该文本超出了我的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;
}
最佳答案
好吧,假设我对OP的评论/问题几乎是相关的,那么我理解的问题是如何在libharu生成的PDF文档中插入很长的行,而不会超出打印范围。
Libharu支持文本框(HPDF_Page_TextRect()),该文本框为写入其中的文本创建边界。它对完整词(即,未插入“...”或“-”)进行换行(在术语的外行定义中),并且效果很好。您需要做的就是定义要使用的HPDF_Rect的大小。当然,这意味着您最终可能会使框的尺寸变得太小而无法容纳所有文本,因此您在设置时仍需格外小心。
在Libharu站点(https://github.com/libharu/libharu/wiki/API%3A-Graphics#wiki-HPDF_Page_TextRect)中,您可以找到HPDF_Page_TextRect的格式,但是基本上您可以给它提供尺寸,要显示的文本以及几个格式/行为参数。
动物451
到目前为止,您可能已经回答了这个问题。