2

我正在为一些与使用 LibHaru 生成 PDF 相关的项目开发工作。我计划在特定区域中放置一些文本。我用过TextRect(),但我在文字换行方面遇到了一些麻烦。

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

以下是拆分字符串函数的代码片段:

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

1 回答 1

2

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

于 2016-09-06T21:54:39.573 回答