我想在iOS中为libHaru PDF添加自动分页符。
我在应用中有几个包含用户填充数据的文本字段。当我生成pdf时,我首先测量将要创建的text-rect的预期大小。如果超过剩余空间,我会触发hpdf_new_page事件并将文本放在新页面上。我想部分自动完成这个。因此,如果文本超出当前页面上的空间,它应该拆分并继续在新页面上,而不检查或执行任何操作。 不幸的是我在文档中找不到这样的东西。
答案 0 :(得分: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命令仅限于几个字体更改,因此它不会太复杂。
答案 1 :(得分:0)
Libharu是一个相当低级的库,由于种种原因,我甚至无法期望在新版本中出现这种自动页面拆分。此后我陈述了其中两个:
为什么?
请考虑您的字体非常大,只有一个字母(例如,宽一个作为" W")不适合页面。我们应该把它放在哪里?在下一页?好的,我们添加了新的页面... oops,它也不适合这个页面 - 只要我们的所有页面都具有相同的大小。死胡同没有任何好的,直截了当的出路。 换句话说,对于这些情况应该有用户定义的策略。 Almosy每个天真的实施都会有这样的角落案例。
libharu不知道哪里它会自动拆分文本。它不知道你的语言的连字规则,它不知道它是否应该尊重空格(仅包括整个单词),等等。由您来指定这些规则。
因此,您应该为文本字符串的某些部分调用HPDF_Font_MeasureText,确定它是否适合您的页面(不包括页边距,页脚 - 也不包括libharu的内部知识)并进行渲染。请注意,文本大小没有简单的公式,具体取决于其长度。字符串" wwww"比#34; iiii"宽两倍以上,当然如果你的字体没有单倍间距。