LibHaru中的文字换行

时间:2016-04-20 11:31:43

标签: c++ libharu

我正在使用LibHaru进行与PDF生成相关的一些项目开发。我打算在特定地区放一些文字。我使用了TextRect()但是我在文本包装方面遇到了一些麻烦。

  1. 如果文本的宽度大于矩形的宽度,则矩形变为空白。我怎么摆脱它?
  2. 我尝试编写自己的文本换行或分割字符串函数,在特定数量的字符之后添加空格,但即使在特定限制之后似乎也失败了。关于文本换行功能的任何帮助。
  3. 我如何计算适合矩形特定宽度的文字宽度?
  4. 以下是拆分字符串函数的代码段:

    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:我在几个字符后添加空格后的字符串计数。

1 个答案:

答案 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 )。