iTextSharp pdfpTable flowing in two columns in sam

2020-04-16 01:26发布

问题:

I am using iTextSharp PdfPTtable for creating tables from a database. When the table is lengthy (long but just with 3 columns), I managed to get the table flowing (or continuing) to the next PDF page. But I want them to continue in the right side (or column) of the same page. And after that it has to continue to next page (left column and then the right column and so on...).

回答1:

Your requirement is (almost) an exact match with one of the examples of my book. Please take a look at page 3 and higher of column_table.pdf.

The book has the Java version of the example, but there's also a version ported to C#.

Basically, you need to add the PdfPTable to a ColumnText object and go() as long as there is content in the column:

// Column definition
float[][] x = {
    new float[] { document.Left, document.Left + 380 },
    new float[] { document.Right - 380, document.Right }
};
column.AddElement(yourTable);
int count = 0; // can be 0 or 1 if your page is divided in 2 parts
float height = 0;
int status = 0;
// render the column as long as it has content
while (ColumnText.HasMoreText(status)) {
    // add the top-level header to each new page
    if (count == 0) {
         AddFooterTable(); // for you to implement to add a footer
         height = AddHeaderTable(); // for you to implement to add a header
    }
    // set the dimensions of the current column
    column.SetSimpleColumn(
        x[count][0], document.Bottom,
        x[count][1], document.Top - height - 10
    );
    // render as much content as possible
    status = column.Go();
    // go to a new page if you've reached the last column
    if (++count > 1) {
        count = 0;
        document.NewPage();
    }
}
document.NewPage();