我正在使用LibHaru进行与PDF生成相关的一些项目开发。我打算在特定地区放一些文字。我使用了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
:我在几个字符后添加空格后的字符串计数。答案 0 :(得分:2)
Libharu是一个相当低级的pdf库。 因此,它没有太多的文本格式选项,例如高级文本换行。 但是,它为您提供了一些帮助:
HPDF_Page_TextRect
写入打印字符数,以便您可以检查打印是否成功而不检查pdf文件; HPDF_Font_TextWidth
返回要打印的文本的宽度(以点为单位);和HPDF_Font_MeasureText
为您提供可以打印到给定宽度的字节数(答案 3 )。使用这些功能,您可以将文本分成几行。 示例( 2 ):
HPDF_Font_MeasureText
设置iLength
strInput.rfind("-",iLength)
\n
; else:将换行符插入iLength
。您可能遇到的另一个问题是盒子的高度。
如果您有太多行,则不会打印它们。
在将文本拆分为多行时,您可以跟踪所需的行数,而框中可能的行数是通过框高度和行间距(由HPDF_Page_SetTextLeading
设置)获得的。
如果您的文字大小太多,则libharu无法执行任何操作。唯一的方法是增加框大小并减小字体大小(答案 1 )。