0

iOS で libHaru PDF に自動改ページを追加したいと考えています。

アプリには、ユーザーが入力したデータを含むテキスト フィールドがいくつかあります。PDFを生成するとき、最初に、作成されるtext-rectの予想サイズを測定します。残りのスペースを超えた場合は、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 コマンドは、2、3 のフォント変更に限定されているため、それほど複雑ではありません。

于 2014-08-03T22:52:11.217 に答える
0

Libharu はかなり低レベルのライブラリであり、いくつかの理由により、新しいバージョンでそのような自動ページ分割が表示されるとは期待できませんでした。以下、そのうちの 2 つを述べます。

  1. 次のページに収まらないテキストの残りをどのように配置するかについて、適切で推奨される戦略はありません。場合によっては、まったく不可能になることさえあります。
  2. テキストを分割するための適切で推奨される戦略はありません。

なんで?

  1. フォントが非常に大きく、1 文字(たとえば、"W" のように幅の広いもの) だけではページに収まらないと考えてください。どこに置くべきですか?次のページで?わかりました、新しいページを追加します... おっと、このページにも収まりません - すべてのページが同じサイズになるとすぐに。良い、簡単な方法のない行き止まり。つまり、これらのケースにはユーザー定義の戦略が必要です。ほとんどすべての素朴な実装には、そのようなコーナーケースがあります。

  2. libharu は、テキストを自動的に分割する場所を知りません。言語のハイフネーション ルールを認識していない、スペースを尊重する必要があるかどうか (単語全体のみをラップするかどうか) などを認識していません。これらのルールを指定するのはあなた次第です。

したがって、テキスト文字列の一部に対して HPDF_Font_MeasureText を呼び出し、それがページに収まるかどうかを判断し (余白、フッターを除く - これも libharu の内部知識から)、レンダリングする必要があります。また、長さに応じたテキスト サイズの単純な公式はないことに注意してください。文字列「wwww」は、もちろん、フォントが等幅でない場合、「iiii」の 2 倍以上の幅です。

于 2015-03-24T17:25:34.660 に答える