2014-07-20 72 views
0

我想在iOS中添加一個自動分頁符到libHaru PDF。自動分頁在libHaru PDF

我在應用程序中有幾個文本字段,其中包含用戶填充的數據。當我生成pdf時,首先測量要創建的文本的預期大小。如果它超過剩餘空間,我會觸發hpdf_new_page事件並將文本放在新頁面上。我想這只是部分自動。所以如果文本超出了當前頁面上的空間,它應該拆分並在新頁面上繼續,而不用檢查或執行任何操作。 不幸的是我在文檔中找不到像這樣的東西。

回答

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命令僅限於幾個字體更改,所以它不會太複雜。

+0

好的,我會試試。但由於文本來自一個簡單的iOS文本字段,我不知道如果我得到格式命令... – kriz

0

Libharu是一個相當低級的庫,我甚至無法期望在更新的版本中出現這種自動分頁的原因有很多。此後我陳述其中兩個:

  1. 沒有一個好的,首選的策略如何將其餘的非擬合文本放在下一頁。在某些情況下甚至可能根本不可能。
  2. 對於文本分割沒有好的首選策略。

爲什麼?

  1. 考慮您的字體非常大,只是一個字母(例如,一個廣爲「W」)不適合的頁面。我們應該在哪裏放置它?在下一頁?好的,我們添加新的頁面... oops,它不適合這個頁面 - 只要我們所有的頁面具有相同的大小。死路沒有任何好的,直接的出路。換句話說,這些案例應該有一個用戶定義的策略。 Almosy每一個天真的執行都會有這樣的角落案例。

  2. libharu不知道其中它應該自動分割您的文本。它不知道你的語言的連字規則,它不知道它是否應該尊重空格(僅包含整個單詞),等等。您需要指定這些規則。

所以,你應該叫HPDF_Font_MeasureText爲您的文本字符串的某些部分,決定是否適合你的頁面(不包括邊距,頁腳 - 這也是出於libharu的內部知識)和渲染。並且請注意,根據文本的長度不存在簡單的文本大小公式。字符串「wwww」比「iiii」寬兩倍以上,當然如果你的字體不是單排列的。