0

親テーブルとして使用する 1 つの列を持つメインの PdfpTable があります。次に、動的な列数で作成されたテーブルを親テーブルに追加します。

したがって、各テーブルは親テーブルの行です。いくつかのことを除いて、私が望んでいたものを手に入れています:

1) テーブルが追加され、左と右の両方にかなりの余白があります。サブテーブルで行スペースを埋めたい。

2) 列幅が保持されていません。新しい各テーブルの最初の列は、列の合計数に基づいて幅が変わります。

3) メイン テーブルの幅は .TotalWidth 設定の影響を受けないようです

 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);

各列の幅を設定し、パディングを削除し、親テーブルとサブテーブルの両方の合計幅を設定しようとしましたが、結果はまちまちです。

4

1 に答える 1

0

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

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

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

全体の幅を定義するので、幅もロックする必要があります。私のコードは Java ですが、コードを C# に適応させるのは非常に簡単です。それは次のようなものですmainTable.LockedWidth = true;(私は C# にそれほど精通していないので、私の C# が完全に正しくない場合はご容赦ください)。

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

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);

テーブルをネストする 2 つ目の方法は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それも機能しますが、パディングを次のように設定する必要があります。

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 と定義し、サブテーブルのすべての列幅の合計が 1000 と同じであることを確認したことに注意してsetTotalWidths()ください。絶対値を渡しているため、この方法も使用しました (一方、相対値を渡す)。

最終結果は次のようになります: cmp_nested_tables6.pdf

ここに画像の説明を入力

ご覧のとおり、両側に空白はありません。

于 2016-05-31T15:08:02.733 に答える