2

itextpdf の PdfPTable に基づくグリッド テーブルを使用して PDF ドキュメントを作成しています。入力データは、すべてのセルが埋められた Java String[][] として到着します。列ごとに、すべての行を繰り返し処理して、その列のデータを表示するために必要な最大列を特定します。それが列幅になります。テーブル全体の最大列数を決定するために、すべての列幅が合計されます。この時点で、等幅フォントが列の幅を完全に占有する最適なポイント サイズを計算することを目的としています。目的は、非常に動的な入力データに直面したときの最大の可読性です。幅の広い列の場合、列を左から右にうまく埋めるのではなく、多くの末尾の空白になってしまいます。列内は左詰めの外観が望ましいです。ランタイム環境は、RHEL5.X 上の openjdk-1.6.0 です。

コードは完全に稼働していますが、列のテキストが列のフィールドを完全に占めていると、外観が良くなる可能性があります。

4

2 に答える 2

3

あなたの質問を3回読みましたが、理解できません。

言い換えてみましょう:特定の使用可能な幅が与えられた場合、使用可能な幅に一致するように、テキストのスニペットのフォント サイズを定義するにはどうすればよいでしょうか。

BaseFontまず、オブジェクトが必要です。例えば:

BaseFont bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);

これで、この文字列の幅を「正規化された 1000 単位」でベース フォントに問い合わせることができます (これらは「グリフ スペース」で使用される単位です。詳細については、ISO-32000-1 を参照してください)。

float glyphWidth = bf.getWidth("WHAT IS THE WIDTH OF THIS STRING?");

これで、これらの「正規化された 1000 単位」をポイント単位の実際のサイズに変換できます (実際にはユーザー単位ですが、簡単にするために 1 ユーザー単位 = 1 pt と仮定します)。

たとえば、「WHAT IS THE WIDTH OF THIS STRING?」というテキストの幅。サイズが 16pt の Courier を使用する場合:

 float width = glyphWidth * 0.001f * 16f;

あなたの質問は異なります。特定の のフォント サイズを知りたいのですwidth。それは次のように行われます:

 float fontSize = 1000 * width / glyphwidth;

これがあなたの質問に答えることを願っています。そうでない場合は、言い換えてください。

于 2013-04-12T11:05:10.780 に答える