2016-05-31 13 views
0

私は親テーブルとして使用する1つのカラムを持つメインPdfpTableを持っています。次に、親テーブルに動的な列数で作成されたテーブルを追加します。PdfpTableセルにネストされたPdfpTableセルの両側に空白があります

したがって、各テーブルは親テーブルの行です。 私はいくつかの点を除いて私が望むものを得ています:

1)テーブルには、左右に大きな空白が追加されています。私は、サブテーブルが行スペースを埋めるようにします。

2)カラムの幅は保持されません。新しいテーブルの最初のカラムは、カラムの総数に基づいて幅を変更します。

3)メインテーブル幅は、私がパディングを削除し、各列の幅を設定する試み、および親の両方の合計幅を設定した

PdfPTable mainTable = new PdfPTable(1); 
    mainTable.TotalWidth = 1000f; 

     //Iterating through some data, get the count then create tables. 
     PdfPTable subTable = new PdfPTable(colCount); 

//I tried setting the widths to fix issue 2 
    float[] colWidths = new float[colCount]; 
         colWidths[0] = 50f; 
         for (int i = 1; i < colCount; i++) 
         { 
          colWidths[i] = 50f; 
         } 
         subTable.SetWidths(colWidths); 

     PdfPCell cell = new PdfPCell(); 
           cell.AddElement("test"); 
           subTable.AddCell(cell); 

     PdfPCell tblCell = new PdfPCell(); 
          //tblCell.Padding = 0f; 
          //tblCell.PaddingLeft = 0f; 
          //tblCell.PaddingRight = 0f; 
          tblCell.AddElement(subTable); 
          mainTable.AddCell(tblCell); 

を設定.TotalWidthの影響を受けていないようサブテーブルが混在しています。

+0

私は完全な答えを得る時間がありませんが、混乱の1つのポイントは 'SetWidths()'セットが_relative_列の幅であるということです。"50,100"を渡すと、50単位と100単位を渡すことはありませんが、代わりに最初の列は1/3(50 /(50 + 100))を取得し、2番目の列は2/3 /(50 + 100)) 'となる。代わりに 'SetTotalWidth(float [])'と 'LockedWidth'を使いたいでしょう –

答えて

0

テーブルのネストにはさまざまな方法がありますが、それぞれのアプローチにはそれぞれ固有の動作があります。私はNestedTables6例でこれを実証してきました:

まず、我々は、メインテーブルを作成します。

PdfPTable mainTable = new PdfPTable(1); 
mainTable.setTotalWidth(1000); 
mainTable.setLockedWidth(true); 

我々は全体の幅を定義するように、我々はまた、幅をロックする必要があります。私のコードはJavaになっていますが、コードをC#に適応させるのはとても簡単です。 mainTable.LockedWidth = true;のようなものです(私はC#に堪能ではありませんので、C#が完全ではない場合は私を許してください)。

テーブルをネストする最も簡単な方法は、テーブルにaddCell()を追加することです。ただし、この場合はデフォルトのパディングが使用されます。つまり、デフォルトのパディングを0に設定する必要があります。ようなものになるだろうC#の、では:JavaではmainTable.DefaultCell.Padding = 0;、それは次のように行われています:

mainTable.getDefaultCell().setPadding(0); 
PdfPTable subTable1 = new PdfPTable(5); 
subTable1.setTotalWidth(new float[]{200, 200, 200, 100, 300}); 
subTable1.setLockedWidth(true); 
subTable1.addCell("test 1"); 
subTable1.addCell("test 2"); 
subTable1.addCell("test 3"); 
subTable1.addCell("test 4"); 
subTable1.addCell("test 5"); 
mainTable.addCell(subTable1); 

巣への第二の方法のテーブル、パラメータとしてテーブルとPdfPCellを作成することです。この場合、デフォルトの埋め込みは0です。

PdfPTable subTable2 = new PdfPTable(5); 
subTable2.setTotalWidth(new float[]{200, 100, 200, 200, 300}); 
subTable2.setLockedWidth(true); 
subTable2.addCell("test 1"); 
subTable2.addCell("test 2"); 
subTable2.addCell("test 3"); 
subTable2.addCell("test 4"); 
subTable2.addCell("test 5"); 
PdfPCell cell2 = new PdfPCell(subTable2); 
mainTable.addCell(cell2); 

AddElement()メソッドを使用しています。それはあまりにも動作しますが、あなたは0にパディングを設定する必要があります:私は1000年のように、テーブル全体の幅を定義し

PdfPTable subTable3 = new PdfPTable(5); 
subTable3.setTotalWidth(new float[]{200, 200, 100, 200, 300}); 
subTable3.setLockedWidth(true); 
subTable3.addCell("test 1"); 
subTable3.addCell("test 2"); 
subTable3.addCell("test 3"); 
subTable3.addCell("test 4"); 
subTable3.addCell("test 5"); 
PdfPCell cell3 = new PdfPCell(); 
cell3.setPadding(0); 
cell3.addElement(subTable3); 
mainTable.addCell(cell3); 

注意をし、私は確信して作られたことをそのサブテーブルのすべての列幅の合計1000と同じです。絶対値を渡しているので、私はsetTotalWidths()メソッドを使用しました(相対値を渡しているのに対して)。

最終結果は以下のようになります。あなたが見ることができるようにcmp_nested_tables6.pdf

enter image description here

、両側には空白はありません。

+0

素晴らしい例です。私はこれを試してアップデートをします。 – JWiley

関連する問題