gpt4 book ai didi

c++ - LibHaru 中的文本换行

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:37 25 4
gpt4 key购买 nike

我正在从事一些与使用 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:我在几个字符后加空格后的字符串个数。

最佳答案

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

关于c++ - LibHaru 中的文本换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36742490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com