Skip to content

3.12 Draw Book Order Form

OgreTransporter edited this page Mar 2, 2020 · 1 revision

The DrawBookOrderForm method is an example of an order entry form or an invoice. It is an example for data table support. It demonstrate the use of PdfTable, PdfTableCell and PdfTableStyle classes.

// Draw example of order form
private void DrawBookOrderForm()
{
    // Define constants to make the code readable
    const double Left = 4.35;
    const double Top = 4.65;
    const double Bottom = 1.1;
    const double Right = 7.4;
    const double FontSize = 9.0;
    const double MarginHor = 0.04;
    const double MarginVer = 0.04;
    const double FrameWidth = 0.015;
    const double GridWidth = 0.01;

    // column widths
    double ColWidthPrice = ArialNormal.TextWidth(FontSize, "9999.99") + 2.0 * MarginHor;
    double ColWidthQty = ArialNormal.TextWidth(FontSize, "Qty") + 2.0 * MarginHor;
    double ColWidthDesc = Right - Left - FrameWidth - 3 * GridWidth - 2 * ColWidthPrice - ColWidthQty;

    // define table
    PdfTable Table = new PdfTable(Page, Contents, ArialNormal, FontSize);
    Table.TableArea = new PdfRectangle(Left, Bottom, Right, Top);
    Table.SetColumnWidth(new double[] { ColWidthDesc, ColWidthPrice, ColWidthQty, ColWidthPrice });

    // define borders
    Table.Borders.SetAllBorders(FrameWidth, GridWidth);

    // margin
    PdfRectangle Margin = new PdfRectangle(MarginHor, MarginVer);

    // default header style
    Table.DefaultHeaderStyle.Margin = Margin;
    Table.DefaultHeaderStyle.BackgroundColor = Color.FromArgb(255, 196, 255);
    Table.DefaultHeaderStyle.Alignment = ContentAlignment.MiddleRight;

    // private header style for description
    Table.Header[0].Style = Table.HeaderStyle;
    Table.Header[0].Style.Alignment = ContentAlignment.MiddleLeft;

    // table heading
    Table.Header[0].Value = "Description";
    Table.Header[1].Value = "Price";
    Table.Header[2].Value = "Qty";
    Table.Header[3].Value = "Total";

    // default style
    Table.DefaultCellStyle.Margin = Margin;

    // description column style
    Table.Cell[0].Style = Table.CellStyle;
    Table.Cell[0].Style.MultiLineText = true;

    // qty column style
    Table.Cell[2].Style = Table.CellStyle;
    Table.Cell[2].Style.Alignment = ContentAlignment.BottomRight;

    Table.DefaultCellStyle.Format = "#,##0.00";
    Table.DefaultCellStyle.Alignment = ContentAlignment.BottomRight;

    Contents.DrawText(ArialBold, FontSize, 0.5 * (Left + Right), Top + MarginVer + Table.DefaultCellStyle.FontDescent,
    TextJustify.Center, DrawStyle.Normal, Color.Purple, "Example of PdfTable support");

    // reset order total
    double Total = 0;

    // loop for all items in the order
    // Order class is a atabase simulation for this example
    foreach(Order Book in Order.OrderList)
        {
        Table.Cell[0].Value = Book.Title + ". By: " + Book.Authors;
        Table.Cell[1].Value = Book.Price;
        Table.Cell[2].Value = Book.Qty;
        Table.Cell[3].Value = Book.Total;
        Table.DrawRow();

        // accumulate total
        Total += Book.Total;
        }
    Table.Close();

    // save graphics state
    Contents.SaveGraphicsState();

    // form line width 0.01"
    Contents.SetLineWidth(FrameWidth);
    Contents.SetLineCap(PdfLineCap.Square);

    // draw total before tax
    double[] ColumnPosition = Table.ColumnPosition;
    double TotalDesc = ColumnPosition[3] - MarginHor;
    double TotalValue = ColumnPosition[4] - MarginHor;
    double PosY = Table.RowTopPosition - 2.0 * MarginVer - Table.DefaultCellStyle.FontAscent;
    Contents.DrawText(ArialNormal, FontSize, TotalDesc, PosY, TextJustify.Right, "Total before tax");
    Contents.DrawText(ArialNormal, FontSize, TotalValue, PosY, TextJustify.Right, Total.ToString("#.00"));

    // draw tax (Ontario Canada HST)
    PosY -= Table.DefaultCellStyle.FontLineSpacing;
    Contents.DrawText(ArialNormal, FontSize, TotalDesc, PosY, TextJustify.Right, "Tax (13%)");
    double Tax = Math.Round(0.13 * Total, 2, MidpointRounding.AwayFromZero);
    Contents.DrawText(ArialNormal, FontSize, TotalValue, PosY, TextJustify.Right, Tax.ToString("#.00"));

    // draw total line
    PosY -= Table.DefaultCellStyle.FontDescent + 0.5 * MarginVer;
    Contents.DrawLine(ColumnPosition[3], PosY, ColumnPosition[4], PosY);

    // draw final total
    PosY -= Table.DefaultCellStyle.FontAscent + 0.5 * MarginVer;
    Contents.DrawText(ArialNormal, FontSize, TotalDesc, PosY, TextJustify.Right, "Total payable");
    Total += Tax;
    Contents.DrawText(ArialNormal, FontSize, TotalValue, PosY, TextJustify.Right, Total.ToString("#.00"));

    PosY -= Table.DefaultCellStyle.FontDescent + MarginVer;
    Contents.DrawLine(ColumnPosition[0], Table.RowTopPosition, ColumnPosition[0], PosY);
    Contents.DrawLine(ColumnPosition[0], PosY, ColumnPosition[4], PosY);
    Contents.DrawLine(ColumnPosition[4], Table.RowTopPosition, ColumnPosition[4], PosY);

    // restore graphics state
    Contents.RestoreGraphicsState();
    return;
}
Clone this wiki locally