0

我想在 iOS 中为 libHaru PDF 添加自动分页符。

我在应用程序中有几个包含用户填充数据的文本字段。当我生成 pdf 时,我首先测量要创建的文本矩形的预期大小。如果超出剩余空间,我会触发 hpdf_new_page 事件并将文本放在新页面上。我想部分自动地拥有它。因此,如果文本超出当前页面上的空间,它应该拆分并在新页面上继续,而无需我检查或做任何事情。不幸的是,我在文档中找不到这样的东西。

4

2 回答 2

1

使用 fgets() 进行行数可能会有所帮助。当您的打印程序打开要打印的文件时,可以将每一行复制到 pdf 文件并检查换页符

或者

如果行数已达到限制。

另一种可能的解决方案是使用带有“while(getc(file) != EOF)”的字符数限制。

此链接使用 libharu 打印带有 PCL 命令以更改字体的基本文本文件。 https://github.com/DaDaDadeo/GetCycle/blob/master/pcl_to_pdf.c

换页符 '\f' (ascii 12) 和 61 行将触发一个新页面。程序中还有其他条件来限制新页面,但说明了总体思路。

结果与使用 telnet raw 9100 协议的打印机相同。pcl 命令仅限于几个字体更改,所以它不是太复杂。

于 2014-08-03T22:52:11.217 回答
0

Libharu 是相当低级的库,由于多种原因,我什至无法期望在较新的版本中出现这种自动分页。下面我说其中的两个:

  1. 没有好的首选策略如何将剩余的不合适的文本放在下一页上。在某些情况下,这甚至可能根本不可能。
  2. 没有好的、首选的文本拆分策略。

为什么?

  1. 考虑您的字体非常大,并且只有一个字母(例如,宽一个为“W”)不适合页面。我们应该把它放在哪里?在下一页?好的,我们添加新页面...哎呀,它也不适合这个页面 - 只要我们所有的页面都具有相同的大小。没有任何好的直接出路的死胡同。换句话说,应该有针对这些情况的用户定义策略。Almosy 每个幼稚的实现都会有这样的极端情况。

  2. libharu 不知道它应该在哪里自动拆分您的文本。它不知道你的语言的断字规则,它不知道它是否应该尊重空格(是否只换行)等等。由您来指定这些规则。

因此,您应该为您的文本字符串的某些部分调用 HPDF_Font_MeasureText,确定它是否适合您的页面(不包括边距、页脚 - 这也超出了 libharu 的内部知识)并呈现它。请注意,文本大小没有简单的公式取决于其长度。字符串“wwww”比“iiii”宽两倍多,当然如果您的字体不是等距的。

于 2015-03-24T17:25:34.660 回答