1

iText を使用して PDF ファイルを作成しています。テスト中に、見出しが列の下部に印刷され、次の列に追加テキストが印刷される状況が発生しました。

簡単な解決策paragraph.setKeepTogether( true );では、余白が多くなります (以下の追加情報を参照してください)。これは、左側に現在の状況、右側に取得したいものを示す画像です。

現在および必要な状況(評判...)

私の最大の問題の 1 つは、columnText.getYLine()テキストが次に流れても、"origin" 列の最下位の位置を返すことです。iText サイトの例と、「itext 列」といくつかのブログの stackoverflow のすべての結果を調べましたが、各記事を新しい列に印刷する以外に、問題の解決策が見つかりませんでした。英語は私の母国語ではないので、問題を簡潔に説明すると、自分自身を検索するのに役立ちます。

追加情報

これは、遠隔医療プロジェクトのレポート生成の一部です。ページ テンプレートは、Web フロント エンドによって入力されます。ECG出力の画像を添付するなど、いくつかの後処理ステップがあります。これらは読みやすくするために高いピクセル密度を必要とします。そのため、私は iText を使用しています (密度を考慮せずに pdfbox スケールを使用しています)。少し前に、医師は 1 ページのスペースよりも多くのテキストを挿入する必要があることに気付きました。そのため、彼らは付録でオーバーフローを望んでいました。別のライブラリを使用できます。重要なのは、紙の上での読みやすさと (l)gpl/apache/... のようなライセンスです。余白があるとページ数が増えるため、概要が減り、紙の無駄になります。

4

1 に答える 1

0

setKeepTogether()メソッドは と組み合わせて動作することは想定されていませんColumnText。私の本 (私のアバターに表示されているもの) に記載されているように、ColumnTextクラスをシミュレーション モードで使用して、レイアウトを微調整できます。

アイデアは、試行錯誤のプロセスでコンテンツの場所を定義することです。最初にコンテンツを追加して呼び出しgo(true)ます。これにより、列のコンテンツが消費されますが、ドキュメントにはコンテンツが追加されません。これを使用して、書き込まれた行数を検出したり ( getLinesWritten())、すべてのコンテンツをレンダリングできたかどうかを確認したり( ) したりできますhasMoreText()

使用可能なスペースを使用してすべてのテキストを書き込むことができることがわかったとします。そのコンテンツをもう一度列に追加し、Y 位置を元の値に変更して、実際に列を追加します。go();

列にコンテンツが残っている場合は、新しい列を作成し、コンテンツを新たに追加してから決定する必要があります。列の位置を変更し、go();コンテンツが残っているが、コンテンツが 2 つの部分に分割される可能性がある場合は、Y 位置とgo();を変更します。go()次に、列の位置を変更し、もう一度呼び出して、残りのコンテンツを別の列にレンダリングします。

第 3 章ColumnTextにさまざまな例があります。

于 2013-02-01T11:56:23.467 に答える