public override void OnStartPage(PdfWriter writer, Document document) { base.OnStartPage(writer, document); Font fontT = new Font(Font.FontFamily.HELVETICA, 20f, Font.BOLD); PdfPCell title = new PdfPCell(new Phrase("DM i Skills", fontT)) { Border = 0 }; Font fontH = new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD); PdfPTable header = new PdfPTable(5); header.TotalWidth = PageSize.A4.Width - 50; header.DefaultCell.Border = 2; header.SetWidths(width); if (writer.CurrentPageNumber == 1) { title.Colspan = 5; header.AddCell(title); } header.AddCell(new PdfPCell(new Phrase("Deltagere", fontH)) { Border = 2 }); header.AddCell(new PdfPCell(new Phrase("Skole og klasse", fontH)) { Border = 2 }); header.AddCell(new PdfPCell(new Phrase("Lokation", fontH)) { Border = 2, HorizontalAlignment = Element.ALIGN_CENTER }); header.AddCell(new PdfPCell(new Phrase("Dato", fontH)) { Border = 2, HorizontalAlignment = Element.ALIGN_CENTER }); header.AddCell(new PdfPCell(new Phrase("Tid", fontH)) { Border = 2, HorizontalAlignment = Element.ALIGN_CENTER }); float height = 0; if (writer.CurrentPageNumber == 1) { titleHeight = header.CalculateHeights(); } else { height = titleHeight - header.CalculateHeights(); } header.WriteSelectedRows(0, -1, 25, PageSize.A4.Height - height, writer.DirectContent); }
float getHeaderHeight(global::iTextSharp.text.Rectangle pageSize) { if (this._template.Header == null) { return(0); } SectionRenderer renderer = new SectionRenderer(this._template); PdfPTable tblHeader = new PdfPTable(this._template.Columns.Count); tblHeader.WidthPercentage = 100; tblHeader.SetWidths(this._template.Columns.Select(x => (float)x.Width).ToArray()); tblHeader.TotalWidth = pageSize.Width - ((float)(this._template.PageOptions.Margins.Left - this._template.PageOptions.Margins.Left)); renderer.Render(_template.Header.Rows, tblHeader); return(tblHeader.CalculateHeights()); }
public MemoryStream GeneratePdfTemplate(CostCalculationRetailViewModel viewModel) { BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); BaseFont bf_bold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font_8 = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 8); Font font_9 = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 9); DateTime now = DateTime.Now; Document document = new Document(PageSize.A4, 10, 10, 10, 10); MemoryStream stream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.CloseStream = false; document.Open(); PdfContentByte cb = writer.DirectContent; float margin = 10; float printedOnHeight = 10; float startY = 840 - margin; #region Header cb.BeginText(); cb.SetFontAndSize(bf, 10); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "PT. EFRATA RETAILINDO", 10, 820, 0); cb.SetFontAndSize(bf_bold, 12); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "COST CALCULATION RETAIL", 10, 805, 0); cb.EndText(); #endregion #region Top PdfPTable table_top = new PdfPTable(9); table_top.TotalWidth = 500f; float[] top_widths = new float[] { 1f, 0.1f, 2f, 1f, 0.1f, 2f, 1f, 0.1f, 2f }; table_top.SetWidths(top_widths); PdfPCell cell_top = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; PdfPCell cell_colon = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE }; PdfPCell cell_top_keterangan = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2, Colspan = 7 }; cell_colon.Phrase = new Phrase(":", normal_font); cell_top.Phrase = new Phrase("RO", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.RO}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("BUYER", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Buyer.Name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("OL", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); double OLValue = viewModel.OL.Value ?? 0; string OL = OLValue > 0 ? OLValue.ToString() + " menit" : OLValue.ToString(); cell_top.Phrase = new Phrase($"{OL}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("ARTICLE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Article}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("DELIVERY", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.DeliveryDate.ToString("dd MMMM yyyy")}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("OTL 1", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); double OTL1Value = viewModel.OTL1.Value ?? 0; string OTL1 = OTL1Value > 0 ? OTL1Value.ToString() + " detik" : OTL1Value.ToString(); cell_top.Phrase = new Phrase($"{OTL1}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("STYLE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Style.name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("SIZE RANGE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.SizeRange.Name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("OTL 2", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); double OTL2Value = viewModel.OTL2.Value ?? 0; string OTL2 = OTL2Value > 0 ? OTL2Value.ToString() + " detik" : OTL2Value.ToString(); cell_top.Phrase = new Phrase($"{OTL2}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("SEASON", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Season.name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("EFFICIENCY", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Efficiency.Value}%", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("OTL 3", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); double OTL3Value = viewModel.OTL3.Value ?? 0; string OTL3 = OTL3Value > 0 ? OTL3Value.ToString() + " detik" : OTL3Value.ToString(); cell_top.Phrase = new Phrase($"{OTL3}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("COUNTER", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Counter.name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("RISK", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Risk}%", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("TOTAL SMV", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); double STD_HourValue = viewModel.SH_Cutting.Value + viewModel.SH_Finishing.Value + viewModel.SH_Sewing.Value; string STD_Hour = STD_HourValue > 0 ? STD_HourValue.ToString() : STD_HourValue.ToString(); cell_top.Phrase = new Phrase($"{STD_Hour}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("KETERANGAN", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top_keterangan.Phrase = new Phrase($"{viewModel.Description}", normal_font); table_top.AddCell(cell_top_keterangan); #endregion #region Draw Image float imageHeight; try { byte[] imageByte = Convert.FromBase64String(Base64.GetBase64File(viewModel.ImageFile)); Image image = Image.GetInstance(imgb: imageByte); if (image.Width > 60) { float percentage = 0.0f; percentage = 60 / image.Width; image.ScalePercent(percentage * 100); } imageHeight = image.ScaledHeight; float imageY = 800 - imageHeight; image.SetAbsolutePosition(520, imageY); cb.AddImage(image, inlineImage: true); } catch (Exception) { imageHeight = 0; } #endregion #region Draw Top float row1Y = 800; table_top.WriteSelectedRows(0, -1, 10, row1Y, cb); #endregion #region Detail (Bottom, Column 1.2) PdfPTable table_detail = new PdfPTable(2); table_detail.TotalWidth = 280f; float[] detail_widths = new float[] { 1f, 1f }; table_detail.SetWidths(detail_widths); PdfPCell cell_detail = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 5, Rowspan = 4 }; double total = Convert.ToDouble(viewModel.OL.CalculatedValue + viewModel.OTL1.CalculatedValue + viewModel.OTL2.CalculatedValue + viewModel.OTL3.CalculatedValue); cell_detail.Phrase = new Phrase( "OL".PadRight(22) + ": " + viewModel.OL.CalculatedValue + Environment.NewLine + Environment.NewLine + "OTL 1".PadRight(20) + ": " + viewModel.OTL1.CalculatedValue + Environment.NewLine + Environment.NewLine + "OTL 2".PadRight(20) + ": " + viewModel.OTL2.CalculatedValue + Environment.NewLine + Environment.NewLine + "OTL 3".PadRight(20) + ": " + viewModel.OTL3.CalculatedValue + Environment.NewLine + Environment.NewLine + "Total".PadRight(22) + ": " + total + Environment.NewLine , normal_font); table_detail.AddCell(cell_detail); cell_detail = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_BOTTOM, Padding = 5 }; cell_detail.Phrase = new Phrase("HPP", normal_font); table_detail.AddCell(cell_detail); cell_detail = new PdfPCell() { Border = Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_TOP, Padding = 5 }; cell_detail.Phrase = new Phrase(Number.ToRupiah(viewModel.HPP), font_9); table_detail.AddCell(cell_detail); cell_detail = new PdfPCell() { Border = Rectangle.LEFT_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_BOTTOM, Padding = 5 }; cell_detail.Phrase = new Phrase("Wholesale Price: HPP X 2.20", normal_font); table_detail.AddCell(cell_detail); cell_detail = new PdfPCell() { Border = Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_TOP, Padding = 5 }; cell_detail.Phrase = new Phrase(Number.ToRupiah(viewModel.WholesalePrice), font_9); table_detail.AddCell(cell_detail); #endregion #region Signature (Bottom, Column 1.2) PdfPTable table_signature = new PdfPTable(3); table_signature.TotalWidth = 280f; float[] signature_widths = new float[] { 1f, 1f, 1f }; table_signature.SetWidths(signature_widths); PdfPCell cell_signature = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_signature.Phrase = new Phrase("Mengetahui,", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Menyetujui,", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Sie Merchandiser", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Direktur Operasional", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Wakil Direktur Utama", normal_font); table_signature.AddCell(cell_signature); string signatureArea = string.Empty; for (int i = 0; i < 5; i++) { signatureArea += Environment.NewLine; } cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Haenis Gunarto ", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ninuk Setyawati", normal_font); table_signature.AddCell(cell_signature); #endregion #region Price (Bottom, Column 2) PdfPTable table_price = new PdfPTable(5); table_price.TotalWidth = 280f; float[] price_widths = new float[] { 1.6f, 3f, 3f, 4f, 1f }; table_price.SetWidths(price_widths); PdfPCell cell_price_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_price_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_price_right = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_price_center.Phrase = new Phrase("KET (X)", bold_font); table_price.AddCell(cell_price_center); cell_price_center.Phrase = new Phrase("HARGA (Rp)", bold_font); table_price.AddCell(cell_price_center); cell_price_center.Phrase = new Phrase("PEMBULATAN HARGA (Rp)", bold_font); table_price.AddCell(cell_price_center); cell_price_center.Phrase = new Phrase("KETERANGAN", bold_font); table_price.AddCell(cell_price_center); cell_price_center.Phrase = new Phrase("", bold_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed20), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding20), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding20") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.1", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed21), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding21), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding21") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.2", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed22), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding22), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding22") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.3", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed23), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding23), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding23") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.4", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed24), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding24), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding24") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.5", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed25), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding25), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding25") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.6", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed26), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding26), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding26") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.7", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed27), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding27), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding27") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.8", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed28), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding28), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding28") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("2.9", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed29), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding29), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding29") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("3.0", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Proposed30), normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.Rounding30), normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("Rounding30") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); cell_price_left.Phrase = new Phrase("Others", normal_font); table_price.AddCell(cell_price_left); cell_price_right.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_right); cell_price_right.Phrase = new Phrase(viewModel.RoundingOthers > 0 ? Number.ToRupiahWithoutSymbol(viewModel.RoundingOthers) : "", normal_font); table_price.AddCell(cell_price_right); cell_price_left.Phrase = new Phrase("", normal_font); table_price.AddCell(cell_price_left); cell_price_center.Phrase = new Phrase(viewModel.SelectedRounding.ToString().Equals("RoundingOthers") ? "*" : "", normal_font); table_price.AddCell(cell_price_center); #endregion #region Cost Calculation Material PdfPTable table_ccm = new PdfPTable(7); table_ccm.TotalWidth = 570f; float[] ccm_widths = new float[] { 1.25f, 3.5f, 4f, 9f, 3f, 4f, 4f }; table_ccm.SetWidths(ccm_widths); PdfPCell cell_ccm_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_ccm_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_ccm_right = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_ccm_center.Phrase = new Phrase("NO", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("CATEGORIES", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("MATERIALS", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("DESCRIPTION", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("QUANTITY", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("RP. PTC/PC", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("RP. TOTAL", bold_font); table_ccm.AddCell(cell_ccm_center); double Total = 0; float row1Height = imageHeight > table_top.TotalHeight ? imageHeight : table_top.TotalHeight; float row2Y = row1Y - row1Height - 10; float calculatedHppHeight = 7; float row3LeftHeight = table_detail.TotalHeight + 5 + table_signature.TotalHeight; float row3RightHeight = table_price.TotalHeight; float row3Height = row3LeftHeight > row3RightHeight ? row3LeftHeight : row3RightHeight; float remainingRow2Height = row2Y - 10 - row3Height - printedOnHeight - margin; float allowedRow2Height = row2Y - printedOnHeight - margin; for (int i = 0; i < viewModel.CostCalculationRetail_Materials.Count; i++) { cell_ccm_center.Phrase = new Phrase((i + 1).ToString(), normal_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_left.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].Category.SubCategory != null ? String.Format("{0} - {1}", viewModel.CostCalculationRetail_Materials[i].Category.Name, viewModel.CostCalculationRetail_Materials[i].Category.SubCategory) : viewModel.CostCalculationRetail_Materials[i].Category.Name, normal_font); table_ccm.AddCell(cell_ccm_left); cell_ccm_left.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].Material.Name, normal_font); table_ccm.AddCell(cell_ccm_left); cell_ccm_left.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].Description, normal_font); table_ccm.AddCell(cell_ccm_left); cell_ccm_right.Phrase = new Phrase(String.Format("{0} {1}", viewModel.CostCalculationRetail_Materials[i].Quantity, viewModel.CostCalculationRetail_Materials[i].UOMQuantity.Name), normal_font); table_ccm.AddCell(cell_ccm_right); cell_ccm_right.Phrase = new Phrase(String.Format("{0}/{1}", Number.ToRupiahWithoutSymbol(viewModel.CostCalculationRetail_Materials[i].Price), viewModel.CostCalculationRetail_Materials[i].UOMPrice.Name), normal_font); table_ccm.AddCell(cell_ccm_right); cell_ccm_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.CostCalculationRetail_Materials[i].Total), normal_font); table_ccm.AddCell(cell_ccm_right); Total += viewModel.CostCalculationRetail_Materials[i].Total; float currentHeight = table_ccm.TotalHeight; if (currentHeight / remainingRow2Height > 1) { if (currentHeight / allowedRow2Height > 1) { PdfPRow headerRow = table_ccm.GetRow(0); PdfPRow lastRow = table_ccm.GetRow(table_ccm.Rows.Count - 1); table_ccm.DeleteLastRow(); table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); table_ccm.DeleteBodyRows(); this.DrawPrintedOn(now, bf, cb); document.NewPage(); table_ccm.Rows.Add(headerRow); table_ccm.Rows.Add(lastRow); table_ccm.CalculateHeights(); row2Y = startY; remainingRow2Height = row2Y - 10 - row3Height - printedOnHeight - margin; allowedRow2Height = row2Y - printedOnHeight - margin; } } } cell_ccm_right = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, Colspan = 6 }; cell_ccm_right.Phrase = new Phrase("TOTAL", bold_font_8); table_ccm.AddCell(cell_ccm_right); cell_ccm_right = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_ccm_right.Phrase = new Phrase(Number.ToRupiah(Total), bold_font_8); table_ccm.AddCell(cell_ccm_right); #endregion #region Draw Middle and Bottom table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); float row3Y = row2Y - table_ccm.TotalHeight - 10; float remainingRow3Height = row3Y - printedOnHeight - margin; if (remainingRow3Height < row3Height) { this.DrawPrintedOn(now, bf, cb); row3Y = startY; document.NewPage(); } #region Calculated HPP float calculatedHppY = row3Y - calculatedHppHeight; cb.BeginText(); cb.SetFontAndSize(bf, 8); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "KALKULASI HPP: (OL + OTL1 + OTL2 + FABRIC + ACC) + ((OL + OTL1 + OTL2 + FABRIC + ACC) * Risk)", 10, calculatedHppY, 0); cb.EndText(); #endregion float table_detailY = calculatedHppY - 5; table_detail.WriteSelectedRows(0, -1, 10, table_detailY, cb); float table_signatureY = table_detailY - row3Height + table_signature.TotalHeight; table_signature.WriteSelectedRows(0, -1, 10, table_signatureY, cb); table_price.WriteSelectedRows(0, -1, 300, table_detailY, cb); this.DrawPrintedOn(now, bf, cb); #endregion document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }
public MemoryStream GeneratePdfTemplate(CostCalculationRetailViewModel viewModel) { BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); BaseFont bf_bold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); DateTime now = DateTime.Now; Document document = new Document(PageSize.A4, 10, 10, 10, 10); MemoryStream stream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.CloseStream = false; document.Open(); PdfContentByte cb = writer.DirectContent; float margin = 10; float printedOnHeight = 10; float startY = 840 - margin; PdfPCell cell_colon = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Phrase = new Phrase(":", normal_font) }; #region Header cb.BeginText(); cb.SetFontAndSize(bf, 10); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "PT. EFRATA RETAILINDO", 10, 820, 0); cb.SetFontAndSize(bf_bold, 12); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "BUDGET PRODUCTION", 10, 805, 0); cb.EndText(); #endregion #region Detail 1 (Top) PdfPTable table_detail1 = new PdfPTable(8); table_detail1.TotalWidth = 570f; float[] detail1_widths = new float[] { 1f, 0.1f, 2f, 3f, 1f, 0.1f, 2f, 3f }; table_detail1.SetWidths(detail1_widths); PdfPCell cell_detail1 = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_detail1.Phrase = new Phrase("RO", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.RO}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("SEASON", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.Season.name}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("", normal_font); table_detail1.AddCell(cell_detail1); #endregion #region Draw Detail 1 float row1Y = 800; table_detail1.WriteSelectedRows(0, -1, 10, row1Y, cb); #endregion #region Detail 2 (Bottom, Column 1) PdfPTable table_detail2 = new PdfPTable(2); table_detail2.TotalWidth = 230f; float[] detail2_widths = new float[] { 2f, 5f }; table_detail2.SetWidths(detail2_widths); PdfPCell cell_detail2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; cell_detail2.Phrase = new Phrase("BUYER", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.Buyer.Name}", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("ARTICLE", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.Article}", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("DESCRIPTION", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.Description}", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("QTY", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.Quantity} PCS", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("DELIVERY", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.DeliveryDate.ToString("dd/MM/yyyy")}", normal_font); table_detail2.AddCell(cell_detail2); #endregion #region Signature PdfPTable table_signature = new PdfPTable(5); table_signature.TotalWidth = 570f; float[] signature_widths = new float[] { 1f, 1f, 1f, 1f, 1f }; table_signature.SetWidths(signature_widths); PdfPCell cell_signature = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_signature.Phrase = new Phrase("Membuat,", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Mengetahui,", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Menyetujui,", normal_font); table_signature.AddCell(cell_signature); string signatureArea = string.Empty; for (int i = 0; i < 4; i++) { signatureArea += Environment.NewLine; } cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Merchandiser", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Sie Merchandiser", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Sie Pembelian", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Bag Produksi", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Direktur Marketing", normal_font); table_signature.AddCell(cell_signature); #endregion #region Cost Calculation Material PdfPTable table_ccm = new PdfPTable(10); table_ccm.TotalWidth = 570f; float[] ccm_widths = new float[] { 1f, 3f, 4f, 6f, 2f, 3f, 3f, 2f, 3f, 3f }; table_ccm.SetWidths(ccm_widths); PdfPCell cell_ccm = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_ccm.Phrase = new Phrase("NO", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("CATEGORIES", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("MATERIALS", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("DESCRIPTION", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("USAGE", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("PRICE", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("QUANTITY", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("UNIT", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("AMOUNT", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("PO NUMBER", bold_font); table_ccm.AddCell(cell_ccm); float row2Y = row1Y - table_detail1.TotalHeight - 10; float row3Height = table_detail2.TotalHeight; float row2RemainingHeight = row2Y - 10 - row3Height - printedOnHeight - margin; float row2AllowedHeight = row2Y - printedOnHeight - margin; double totalBudget = 0; #region Process Cost double ol = viewModel.OL.CalculatedValue ?? 0; double processCost = ol; #endregion for (int i = 0; i < viewModel.CostCalculationRetail_Materials.Count; i++) { cell_ccm.Phrase = new Phrase((i + 1).ToString(), normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_LEFT; cell_ccm.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].Category.SubCategory != null ? String.Format("{0} - {1}", viewModel.CostCalculationRetail_Materials[i].Category.Name, viewModel.CostCalculationRetail_Materials[i].Category.SubCategory) : viewModel.CostCalculationRetail_Materials[i].Category.Name, normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].Material.Name, normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].Description, normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_RIGHT; double usage = viewModel.CostCalculationRetail_Materials[i].Quantity ?? 0; cell_ccm.Phrase = new Phrase(usage.ToString(), normal_font); table_ccm.AddCell(cell_ccm); double price = viewModel.CostCalculationRetail_Materials[i].Price ?? 0; cell_ccm.Phrase = new Phrase(String.Format("{0}/{1}", Number.ToRupiahWithoutSymbol(price), viewModel.CostCalculationRetail_Materials[i].UOMPrice.Name), normal_font); table_ccm.AddCell(cell_ccm); double factor; if (viewModel.CostCalculationRetail_Materials[i].Category.Name == "ACC") { factor = viewModel.AccessoriesAllowance ?? 0; } else { factor = viewModel.FabricAllowance ?? 0; } double totalQuantity = viewModel.Quantity ?? 0; double conversion = (double)viewModel.CostCalculationRetail_Materials[i].Conversion; double usageConversion = usage / conversion; double quantity = (100 + factor) / 100 * usageConversion * totalQuantity; quantity = Math.Ceiling(quantity); cell_ccm.Phrase = new Phrase(quantity.ToString(), normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_CENTER; cell_ccm.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].UOMPrice.Name, normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_RIGHT; double amount = quantity * price; cell_ccm.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(amount), normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_CENTER; cell_ccm.Phrase = new Phrase(viewModel.CostCalculationRetail_Materials[i].PO, normal_font); table_ccm.AddCell(cell_ccm); totalBudget += amount; float currentHeight = table_ccm.TotalHeight; if (currentHeight / row2RemainingHeight > 1) { if (currentHeight / row2AllowedHeight > 1) { PdfPRow headerRow = table_ccm.GetRow(0); PdfPRow lastRow = table_ccm.GetRow(table_ccm.Rows.Count - 1); table_ccm.DeleteLastRow(); table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); table_ccm.DeleteBodyRows(); this.DrawPrintedOn(now, bf, cb); document.NewPage(); table_ccm.Rows.Add(headerRow); table_ccm.Rows.Add(lastRow); table_ccm.CalculateHeights(); row2Y = startY; row2RemainingHeight = row2Y - 10 - row3Height - printedOnHeight - margin; row2AllowedHeight = row2Y - printedOnHeight - margin; } } } #endregion #region Detail 3 (Bottom, Column 2) PdfPTable table_detail3 = new PdfPTable(8); table_detail3.TotalWidth = 330f; float[] detail3_widths = new float[] { 3.25f, 4.75f, 1.9f, 0.2f, 1.9f, 1.9f, 0.2f, 1.9f }; table_detail3.SetWidths(detail3_widths); //double budgetCost = viewModel.HPP; double totalProcessCost = processCost * (double)viewModel.Quantity; double budgetCost = totalBudget / (double)viewModel.Quantity; PdfPCell cell_detail3 = new PdfPCell() { HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; PdfPCell cell_detail3_right = new PdfPCell() { HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; PdfPCell cell_detail3_colspan6 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7, Colspan = 6 }; PdfPCell cell_detail3_colspan8 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7, Colspan = 8 }; cell_detail3.Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("TOTAL BUDGET", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.TOP_BORDER | Rectangle.RIGHT_BORDER; cell_detail3.Phrase = new Phrase($"{Number.ToRupiah(totalBudget)}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3_colspan6.Phrase = new Phrase("STANDARD HOURS", normal_font); table_detail3.AddCell(cell_detail3_colspan6); cell_detail3.Border = Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.RIGHT_BORDER; table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("SMV. CUT", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.NO_BORDER; double SH_Cutting = viewModel.SH_Cutting ?? 0; cell_detail3.Phrase = new Phrase($"{SH_Cutting}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.NO_BORDER; cell_detail3.Phrase = new Phrase("SMV. SEW", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.RIGHT_BORDER; double SH_Sewing = viewModel.SH_Sewing ?? 0; cell_detail3.Phrase = new Phrase($"{SH_Sewing}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER; cell_detail3.Phrase = new Phrase("", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("SMV. FIN", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.BOTTOM_BORDER; double SH_Finishing = viewModel.SH_Finishing ?? 0; cell_detail3.Phrase = new Phrase($"{SH_Finishing}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER; cell_detail3.Phrase = new Phrase("SMV. TOT", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER; double SH_Total = SH_Cutting + SH_Sewing + SH_Finishing; cell_detail3.Phrase = new Phrase($"{SH_Total}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3_colspan8.Phrase = new Phrase("BUDGET COST / PCS" + "".PadRight(5) + $"{Number.ToRupiah(budgetCost)}", normal_font); table_detail3.AddCell(cell_detail3_colspan8); cell_detail3_colspan8.Phrase = new Phrase("PROCESS COST" + "".PadRight(5) + $"{Number.ToRupiah(processCost)}", normal_font); table_detail3.AddCell(cell_detail3_colspan8); cell_detail3_colspan8.Phrase = new Phrase("TOTAL PROCESS COST" + "".PadRight(5) + $"{Number.ToRupiah(totalProcessCost)}", normal_font); table_detail3.AddCell(cell_detail3_colspan8); #endregion #region Draw Others table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); float row3Y = row2Y - table_ccm.TotalHeight - 10; float row3RemainigHeight = row3Y - printedOnHeight - margin; if (row3RemainigHeight < row3Height) { this.DrawPrintedOn(now, bf, cb); row3Y = startY; document.NewPage(); } table_detail2.WriteSelectedRows(0, -1, margin, row3Y, cb); table_detail3.WriteSelectedRows(0, -1, margin + table_detail2.TotalWidth + 10, row3Y, cb); float signatureY = row3Y - row3Height - 10; signatureY = signatureY - 20; float signatureRemainingHeight = signatureY - printedOnHeight - margin; if (signatureRemainingHeight < table_signature.TotalHeight) { this.DrawPrintedOn(now, bf, cb); signatureY = startY; document.NewPage(); } table_signature.WriteSelectedRows(0, -1, margin, signatureY, cb); this.DrawPrintedOn(now, bf, cb); #endregion document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }
private void PrintTotalSummaryRow(PdfPTable firstTable, PdfWriter writer) { //Add some space. There's got to be a better way to do this. PdfPTable spacingTable = new PdfPTable(1); PdfPCell spaceCell = new PdfPCell(new Paragraph(" ")); spaceCell.Border = Rectangle.NO_BORDER; spacingTable.AddCell(spaceCell); _document.Add(spacingTable); PdfPTable table = new PdfPTable(new float[] { 2f, 2f, 2f, .5f, 2f, 2f, 2f }); PdfPCell cell = new PdfPCell(new Paragraph("Gold: ", _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph("Total Weight: ", _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph("Total Cost: ", _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph("", _reportFont)); cell.Border = Rectangle.NO_BORDER; table.AddCell(cell); cell = new PdfPCell(new Paragraph("Other: ", _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph("Total Weight: ", _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph("Total Cost: ", _reportFont)); table.AddCell(cell); List <AggScrapItemInfo> goldItems = (from a in _aggData where a.IsGold select a).ToList(); List <AggScrapItemInfo> otherItems = (from a in _aggData where !a.IsGold select a).ToList(); int count = GetMax(new List <int> { otherItems.Count, goldItems.Count }); for (int i = 0; i < count; i++) { //If gold items and other items count //is less than the count then go ahead and print the details. if (goldItems.Count > i && goldItems.Count != 0) { cell = new PdfPCell(new Paragraph(goldItems[i].ApproximateKarats, _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph(goldItems[i].Weight.ToString(), _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph(String.Format("{0:C}", goldItems[i].Cost), _reportFont)); table.AddCell(cell); _totalCost += goldItems[i].Cost; } else { AddBlankCells(table, true); } //Always print out a spacing cell. cell = new PdfPCell(new Paragraph("")); cell.Border = Rectangle.NO_BORDER; table.AddCell(cell); if (otherItems.Count > i && otherItems.Count != 0) { cell = new PdfPCell(new Paragraph(otherItems[i].TypeOfMetal, _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph(otherItems[i].Weight.ToString(), _reportFont)); table.AddCell(cell); cell = new PdfPCell(new Paragraph(String.Format("{0:C}", otherItems[i].Cost), _reportFont)); table.AddCell(cell); _totalCost += otherItems[i].Cost; } else { AddBlankCells(table, false); } } AddBlankCells(table, true); AddBlankCells(table, true); cell = new PdfPCell(new Paragraph("Total: " + String.Format("{0:C}", _totalCost), _reportFont)); cell.Border = Rectangle.NO_BORDER; table.AddCell(cell); float yAbsolutePosition = firstTable.CalculateHeights(true); table.TotalWidth = 500f; table.WriteSelectedRows(0, -1, 24, yAbsolutePosition + 100, writer.DirectContent); //_document.Add(table); }
public MemoryStream GeneratePdfTemplate(CostCalculationGarmentViewModel viewModel, int timeoffset) { BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); BaseFont bf_bold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font_8 = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 8); DateTime now = DateTime.Now; Document document = new Document(PageSize.A4, 10, 10, 10, 10); MemoryStream stream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.CloseStream = false; document.Open(); PdfContentByte cb = writer.DirectContent; float margin = 10; float printedOnHeight = 10; float startY = 840 - margin; #region Header cb.BeginText(); cb.SetFontAndSize(bf, 10); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "PT. DAN LIRIS", 10, 820, 0); cb.SetFontAndSize(bf_bold, 12); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "COST CALCULATION EXPORT GARMENT", 10, 805, 0); cb.EndText(); #endregion #region Detail 1 (Top) PdfPTable table_detail1 = new PdfPTable(9); table_detail1.TotalWidth = 500f; float[] detail1_widths = new float[] { 1f, 0.1f, 2f, 1f, 0.1f, 2f, 1f, 0.1f, 2f }; table_detail1.SetWidths(detail1_widths); PdfPCell cell_detail1 = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; PdfPCell cell_colon = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE }; cell_colon.Phrase = new Phrase(":", normal_font); cell_detail1.Phrase = new Phrase("RO", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.RO_Number}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("SIZE RANGE", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.SizeRange}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("LEAD TIME", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.LeadTime} hari", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("ARTICLE", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.Article}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("SECTION", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.Section}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("FABRIC", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.FabricAllowance}%", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("DATE", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel._CreatedUtc.ToString("dd MMMM yyyy")}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("COMMODITY", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.Commodity.name}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("ACC", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.AccessoriesAllowance}%", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("KONVEKSI", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.Convection}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_detail1); #endregion #region Image float imageHeight; try { byte[] imageByte = Convert.FromBase64String(Base64.GetBase64File(viewModel.ImageFile)); Image image = Image.GetInstance(imgb: imageByte); if (image.Width > 60) { float percentage = 0.0f; percentage = 60 / image.Width; image.ScalePercent(percentage * 100); } imageHeight = image.ScaledHeight; float imageY = 800 - imageHeight; image.SetAbsolutePosition(520, imageY); cb.AddImage(image, inlineImage: true); } catch (Exception) { imageHeight = 0; } #endregion #region Draw Top float row1Y = 800; table_detail1.WriteSelectedRows(0, -1, 10, row1Y, cb); #endregion bool isDollar = viewModel.Rate.Id != 0; #region Detail 2.1 (Bottom, Column 1.1) PdfPTable table_bottom_column1_1 = new PdfPTable(2); table_bottom_column1_1.TotalWidth = 180f; float[] table_bottom_column1_1_widths = new float[] { 1f, 2f }; table_bottom_column1_1.SetWidths(table_bottom_column1_1_widths); PdfPCell cell_bottom_column1_1 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; cell_bottom_column1_1.Phrase = new Phrase("QTY", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase($"{viewModel.Quantity} {viewModel.UOM.unit}", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase("DESCRIPTION", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase($"{viewModel.CommodityDescription}", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase("CONT/STYLE", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase($"{viewModel.Article}", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase("BUYER", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase($"{viewModel.Buyer.name}", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase("DELIVERY", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); cell_bottom_column1_1.Phrase = new Phrase($"{viewModel.DeliveryDate.AddHours(timeoffset).ToString("dd/MM/yyyy")}", normal_font); table_bottom_column1_1.AddCell(cell_bottom_column1_1); #endregion #region Detail 2_2 (Bottom, Column 1.2) PdfPTable table_bottom_column1_2 = new PdfPTable(2); table_bottom_column1_2.TotalWidth = 180f; float[] table_bottom_column1_2_widths = new float[] { 1f, 1f }; table_bottom_column1_2.SetWidths(table_bottom_column1_2_widths); PdfPCell cell_bottom_column1_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 3 }; cell_bottom_column1_2.Phrase = new Phrase("FOB PRICE", bold_font); table_bottom_column1_2.AddCell(cell_bottom_column1_2); cell_bottom_column1_2.Phrase = new Phrase("CMT PRICE", bold_font); table_bottom_column1_2.AddCell(cell_bottom_column1_2); double CM_Price = 0; foreach (CostCalculationGarment_MaterialViewModel item in viewModel.CostCalculationGarment_Materials) { CM_Price += item.CM_Price ?? 0; } double ConfirmPrice = viewModel.ConfirmPrice ?? 0; double CMT = CM_Price > 0 ? ConfirmPrice : 0; string CMT_Price = this.GetCurrencyValue(CMT, isDollar); double FOB = ConfirmPrice + CM_Price; string FOB_Price = this.GetCurrencyValue(FOB, isDollar); cell_bottom_column1_2.Phrase = new Phrase($"{FOB_Price}", normal_font); table_bottom_column1_2.AddCell(cell_bottom_column1_2); cell_bottom_column1_2.Phrase = new Phrase($"{CMT_Price}", normal_font); table_bottom_column1_2.AddCell(cell_bottom_column1_2); #endregion #region Detail 2.3 (Bottom, Column 1.3) PdfPTable table_bottom_column1_3 = new PdfPTable(2); table_bottom_column1_3.TotalWidth = 180f; float[] table_bottom_column1_3_widths = new float[] { 1f, 1f }; table_bottom_column1_3.SetWidths(table_bottom_column1_3_widths); PdfPCell cell_bottom_column1_3 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 3 }; cell_bottom_column1_3.Phrase = new Phrase("CNF PRICE", bold_font); table_bottom_column1_3.AddCell(cell_bottom_column1_3); cell_bottom_column1_3.Phrase = new Phrase("CIF PRICE", bold_font); table_bottom_column1_3.AddCell(cell_bottom_column1_3); string CNF_Price = this.GetCurrencyValue(0, isDollar); cell_bottom_column1_3.Phrase = new Phrase($"{CNF_Price}", normal_font); table_bottom_column1_3.AddCell(cell_bottom_column1_3); string CIF_Price = this.GetCurrencyValue(0, isDollar); cell_bottom_column1_3.Phrase = new Phrase($"{CIF_Price}", normal_font); table_bottom_column1_3.AddCell(cell_bottom_column1_3); #endregion #region Detail 3.1 (Bottom, Column 2.1) PdfPTable table_bottom_column2_1 = new PdfPTable(3); table_bottom_column2_1.TotalWidth = 190f; float[] table_bottom_column2_1_widths = new float[] { 1.5f, 1f, 1.5f }; table_bottom_column2_1.SetWidths(table_bottom_column2_1_widths); PdfPCell cell_bottom_column2_1 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 3 }; PdfPCell cell_bottom_column2_1_colspan2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 3, Colspan = 2 }; cell_bottom_column2_1.Phrase = new Phrase("TOTAL", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); double total = 0; foreach (CostCalculationGarment_MaterialViewModel item in viewModel.CostCalculationGarment_Materials) { total += item.Total; } total += viewModel.ProductionCost; cell_bottom_column2_1_colspan2.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(total), normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1_colspan2); cell_bottom_column2_1.Phrase = new Phrase("OTL 1", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); double OTL1CalculatedValue = viewModel.OTL1.CalculatedValue ?? 0; cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(OTL1CalculatedValue)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); double afterOTL1 = total + OTL1CalculatedValue; cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(afterOTL1)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase("OTL 2", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); double OTL2CalculatedValue = viewModel.OTL2.CalculatedValue ?? 0; cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(OTL2CalculatedValue)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); double afterOTL2 = afterOTL1 + OTL2CalculatedValue; cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(afterOTL2)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase("RISK", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase(String.Format("{0:0.00}%", viewModel.Risk), normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); double afterRisk = (100 + viewModel.Risk) * afterOTL2 / 100;; cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(afterRisk)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase("BEA ANGKUT", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(viewModel.FreightCost)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); double afterFreightCost = afterRisk + viewModel.FreightCost; cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(afterFreightCost)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase("SUB TOTAL", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1_colspan2.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(afterFreightCost)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1_colspan2); cell_bottom_column2_1.Phrase = new Phrase("NET/FOB (%)", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase(String.Format("{0:0.00}%", viewModel.NETFOBP), normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(viewModel.NETFOB)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase("COMM (%)", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase(String.Format("{0:0.00}%", viewModel.CommissionPortion), normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(viewModel.CommissionRate)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1); cell_bottom_column2_1.Phrase = new Phrase("CONFIRM PRICE", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1);; double confirmPrice = viewModel.ConfirmPrice ?? 0 + viewModel.Rate.Value ?? 0; double confirmPriceWithRate = isDollar ? confirmPrice * viewModel.Rate.Value ?? 1 : confirmPrice; cell_bottom_column2_1_colspan2.Phrase = new Phrase($"{Number.ToRupiahWithoutSymbol(confirmPriceWithRate)}", normal_font); table_bottom_column2_1.AddCell(cell_bottom_column2_1_colspan2); #endregion #region Detail 3.2 (Bottom, Column 2.2) PdfPTable table_bottom_column2_2 = new PdfPTable(4); table_bottom_column2_2.TotalWidth = 190f; float[] table_bottom_column2_2_widths = new float[] { 1f, 1.25f, 1f, 1.25f }; table_bottom_column2_2.SetWidths(table_bottom_column2_2_widths); PdfPCell cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3, Colspan = 2 }; cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3, Colspan = 2 }; cell_bottom_column2_2.Phrase = new Phrase("FREIGHT", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3, Colspan = 2 }; string freight = this.GetCurrencyValue(viewModel.Freight ?? 0, isDollar); cell_bottom_column2_2.Phrase = new Phrase($"= {freight}", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.LEFT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3, Colspan = 2 }; cell_bottom_column2_2.Phrase = new Phrase("INSURANCE", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3, Colspan = 2 }; string insurance = this.GetCurrencyValue(viewModel.Insurance ?? 0, isDollar); cell_bottom_column2_2.Phrase = new Phrase($"= {insurance}", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3, Colspan = 2 }; cell_bottom_column2_2.Phrase = new Phrase("CONFIRM PRICE", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3, Colspan = 2 }; string confirmPriceFOB = this.GetCurrencyValue(viewModel.ConfirmPrice ?? 0, isDollar); cell_bottom_column2_2.Phrase = new Phrase($"= {confirmPriceFOB}", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase("SMV CUT", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase($"= {viewModel.SMV_Cutting}", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase("SMV SEW", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase($"= {viewModel.SMV_Sewing}", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase("SMV FIN", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.RIGHT_BORDER | Rectangle.BOTTOM_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase($"= {viewModel.SMV_Finishing}", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase("SMV TOT", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); cell_bottom_column2_2 = new PdfPCell() { Border = Rectangle.RIGHT_BORDER | Rectangle.BOTTOM_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingTop = 5, PaddingRight = 3, PaddingBottom = 5, PaddingLeft = 3 }; cell_bottom_column2_2.Phrase = new Phrase($"= {viewModel.SMV_Total}", normal_font); table_bottom_column2_2.AddCell(cell_bottom_column2_2); #endregion #region Detail 4 (Bottom, Column 3.1) PdfPTable table_bottom_column3_1 = new PdfPTable(2); table_bottom_column3_1.TotalWidth = 180f; float[] table_bottom_column3_1_widths = new float[] { 1f, 2f }; table_bottom_column3_1.SetWidths(table_bottom_column3_1_widths); PdfPCell cell_bottom_column3_1 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; cell_bottom_column3_1.Phrase = new Phrase("DESCRIPTION", normal_font); table_bottom_column3_1.AddCell(cell_bottom_column3_1); cell_bottom_column3_1.Phrase = new Phrase($"{viewModel.Description}", normal_font); table_bottom_column3_1.AddCell(cell_bottom_column3_1); #endregion #region Signature PdfPTable table_signature = new PdfPTable(3); table_signature.TotalWidth = 570f; float[] signature_widths = new float[] { 1f, 1f, 1f }; table_signature.SetWidths(signature_widths); PdfPCell cell_signature = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; //cell_signature.Phrase = new Phrase("", normal_font); //table_signature.AddCell(cell_signature); //cell_signature.Phrase = new Phrase("", normal_font); //table_signature.AddCell(cell_signature); string signatureArea = string.Empty; for (int i = 0; i < 5; i++) { signatureArea += Environment.NewLine; } cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Penjualan", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Kasie. Kabag. Penjualan", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Kadiv. Penjualan", normal_font); table_signature.AddCell(cell_signature); #endregion #region Cost Calculation Material PdfPTable table_ccm = new PdfPTable(7); table_ccm.TotalWidth = 570f; float[] ccm_widths = new float[] { 1.25f, 3.5f, 3.5f, 5f, 3f, 4f, 4f }; table_ccm.SetWidths(ccm_widths); PdfPCell cell_ccm_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_ccm_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_ccm_right = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_ccm_center.Phrase = new Phrase("NO", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("KATEGORI", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("KODE PRODUK", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("DESKRIPSI", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("QUANTITY", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("USD. PTC/PC", bold_font); table_ccm.AddCell(cell_ccm_center); cell_ccm_center.Phrase = new Phrase("USD. TOTAL", bold_font); table_ccm.AddCell(cell_ccm_center); double Total = 0; float row1Height = imageHeight > table_detail1.TotalHeight ? imageHeight : table_detail1.TotalHeight; float row2Y = row1Y - row1Height - 10; float[] row3Heights = { table_bottom_column1_1.TotalHeight + 10 + table_bottom_column1_2.TotalHeight + 10 + table_bottom_column1_3.TotalHeight, table_bottom_column2_1.TotalHeight + 10 + table_bottom_column2_2.TotalHeight, table_bottom_column3_1.TotalHeight }; float dollarDetailHeight = 10; if (isDollar) { row3Heights[1] += dollarDetailHeight; } float row3Height = row3Heights.Max(); float secondHighestRow3Height = row3Heights[1] > row3Heights[2] ? row3Heights[1] : row3Heights[2]; bool signatureInsideRow3 = row3Heights.Max() == row3Heights[0] && row3Heights[0] - 10 - secondHighestRow3Height > table_signature.TotalHeight; float row2RemainingHeight = row2Y - 10 - row3Height - printedOnHeight - margin; float row2AllowedHeight = row2Y - printedOnHeight - margin; for (int i = 0; i < viewModel.CostCalculationGarment_Materials.Count; i++) { //NO cell_ccm_center.Phrase = new Phrase((i + 1).ToString(), normal_font); table_ccm.AddCell(cell_ccm_center); //KATEGORI cell_ccm_left.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].Category.name, normal_font); table_ccm.AddCell(cell_ccm_left); //KODE PRODUK cell_ccm_left.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].Product.code, normal_font); table_ccm.AddCell(cell_ccm_left); //DESKRIPSI cell_ccm_left.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].Description, normal_font); table_ccm.AddCell(cell_ccm_left); cell_ccm_right.Phrase = new Phrase(String.Format("{0} {1}", viewModel.CostCalculationGarment_Materials[i].Quantity, viewModel.CostCalculationGarment_Materials[i].UOMQuantity.unit), normal_font); table_ccm.AddCell(cell_ccm_right); cell_ccm_right.Phrase = new Phrase(String.Format("{0}/{1}", Number.ToRupiahWithoutSymbol(viewModel.CostCalculationGarment_Materials[i].Price), viewModel.CostCalculationGarment_Materials[i].UOMPrice.unit), normal_font); table_ccm.AddCell(cell_ccm_right); cell_ccm_right.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(viewModel.CostCalculationGarment_Materials[i].Total), normal_font); table_ccm.AddCell(cell_ccm_right); Total += viewModel.CostCalculationGarment_Materials[i].Total; float currentHeight = table_ccm.TotalHeight; if (currentHeight / row2RemainingHeight > 1) { if (currentHeight / row2AllowedHeight > 1) { PdfPRow headerRow = table_ccm.GetRow(0); PdfPRow lastRow = table_ccm.GetRow(table_ccm.Rows.Count - 1); table_ccm.DeleteLastRow(); table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); table_ccm.DeleteBodyRows(); this.DrawPrintedOn(now, bf, cb); document.NewPage(); table_ccm.Rows.Add(headerRow); table_ccm.Rows.Add(lastRow); table_ccm.CalculateHeights(); row2Y = startY; row2RemainingHeight = row2Y - 10 - row3Height - printedOnHeight - margin; row2AllowedHeight = row2Y - printedOnHeight - margin; } } } cell_ccm_right = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, Colspan = 6 }; cell_ccm_right.Phrase = new Phrase("TOTAL", bold_font_8); table_ccm.AddCell(cell_ccm_right); cell_ccm_right = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_ccm_right.Phrase = new Phrase(Number.ToRupiah(Total), bold_font_8); table_ccm.AddCell(cell_ccm_right); #endregion #region Draw Middle and Bottom table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); float row3Y = row2Y - table_ccm.TotalHeight - 10; float row3RemainingHeight = row3Y - printedOnHeight - margin; if (row3RemainingHeight < row3Height) { this.DrawPrintedOn(now, bf, cb); row3Y = startY; document.NewPage(); } table_bottom_column1_1.WriteSelectedRows(0, -1, 10, row3Y, cb); float detail1_2Y = row3Y - table_bottom_column1_1.TotalHeight - 10; table_bottom_column1_2.WriteSelectedRows(0, -1, 10, detail1_2Y, cb); float detail1_3Y = detail1_2Y - table_bottom_column1_2.TotalHeight - 10; table_bottom_column1_3.WriteSelectedRows(0, -1, 10, detail1_3Y, cb); table_bottom_column2_1.WriteSelectedRows(0, -1, 200, row3Y, cb); float noteY = row3Y - table_bottom_column2_1.TotalHeight; float table_bottom_column2_2Y; if (isDollar) { noteY = noteY - 15; table_bottom_column2_2Y = noteY - 5; cb.BeginText(); cb.SetFontAndSize(bf, 7); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, $"NOTE: 1 US$ = {Number.ToRupiah(viewModel.Rate.Value)}", 200, noteY, 0); cb.EndText(); } else { table_bottom_column2_2Y = noteY - 10; } table_bottom_column2_2.WriteSelectedRows(0, -1, 200, table_bottom_column2_2Y, cb); //table_bottom_column1_2.WriteSelectedRows(0, -1, 400, row3Y, cb); table_bottom_column3_1.WriteSelectedRows(0, -1, 400, row3Y, cb); float table_signatureX; float table_signatureY; if (signatureInsideRow3) { table_signatureX = margin + table_bottom_column2_2.TotalWidth + 10; table_signatureY = row3Y - row3Height + table_signature.TotalHeight; table_signature.TotalWidth = 390f; } else { table_signatureX = margin; table_signatureY = row3Y - row3Height - 10; float signatureRemainingHeight = table_signatureY - printedOnHeight - margin; if (signatureRemainingHeight < table_signature.TotalHeight) { this.DrawPrintedOn(now, bf, cb); table_signatureY = startY; document.NewPage(); } } table_signature.WriteSelectedRows(0, -1, table_signatureX, table_signatureY, cb); this.DrawPrintedOn(now, bf, cb); #endregion document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }
public MemoryStream GeneratePdfTemplate(RO_RetailViewModel viewModel) { BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); BaseFont bf_bold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font_8 = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 8); Font font_9 = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 9); DateTime now = DateTime.Now; Document document = new Document(PageSize.A4, 10, 10, 10, 10); MemoryStream stream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.CloseStream = false; document.Open(); PdfContentByte cb = writer.DirectContent; float margin = 10; float printedOnHeight = 10; float startY = 840 - margin; #region Header cb.BeginText(); cb.SetFontAndSize(bf, 10); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "PT. EFRATA RETAILINDO", 10, 820, 0); cb.SetFontAndSize(bf_bold, 12); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "RO RETAIL", 10, 805, 0); cb.EndText(); #endregion #region Top PdfPTable table_top = new PdfPTable(9); float[] top_widths = new float[] { 1f, 0.1f, 2f, 1f, 0.1f, 2f, 1f, 0.1f, 2f }; table_top.TotalWidth = 500f; table_top.SetWidths(top_widths); PdfPCell cell_top = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; PdfPCell cell_colon = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE }; PdfPCell cell_top_keterangan = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2, Colspan = 7 }; cell_colon.Phrase = new Phrase(":", normal_font); cell_top.Phrase = new Phrase("NO RO", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationRetail.RO}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("ARTICLE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationRetail.Article}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("STYLE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationRetail.Style.name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("COUNTER", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationRetail.Counter.name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("COLOUR", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Color.name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("DELIVERY DATE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationRetail.DeliveryDate.ToString("dd MMMM yyyy")}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("RO QUANTITY", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top_keterangan.Phrase = new Phrase($"{viewModel.Total}", normal_font); table_top.AddCell(cell_top_keterangan); #endregion #region Image byte[] imageByte; try { imageByte = Convert.FromBase64String(Base64.GetBase64File(viewModel.CostCalculationRetail.ImageFile)); } catch (Exception) { var webClient = new WebClient(); imageByte = webClient.DownloadData("https://bateeqstorage.blob.core.windows.net/other/no-image.jpg"); } Image image = Image.GetInstance(imgb: imageByte); if (image.Width > 60) { float percentage = 0.0f; percentage = 60 / image.Width; image.ScalePercent(percentage * 100); } #endregion #region Draw Top float row1Y = 800; float imageY = 800 - image.ScaledHeight; table_top.WriteSelectedRows(0, -1, 10, row1Y, cb); image.SetAbsolutePosition(520, imageY); cb.AddImage(image, inlineImage: true); #endregion #region Fabric Table Title PdfPTable table_fabric_top = new PdfPTable(1); table_fabric_top.TotalWidth = 570f; float[] fabric_widths_top = new float[] { 5f }; table_fabric_top.SetWidths(fabric_widths_top); PdfPCell cell_top_fabric = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_top_fabric.Phrase = new Phrase("FABRIC", bold_font); table_fabric_top.AddCell(cell_top_fabric); float row1Height = image.ScaledHeight > table_top.TotalHeight ? image.ScaledHeight : table_top.TotalHeight; float rowYTittleFab = row1Y - row1Height - 10; float allowedRow2Height = rowYTittleFab - printedOnHeight - margin; table_fabric_top.WriteSelectedRows(0, -1, 10, rowYTittleFab, cb); #endregion #region Fabric Table PdfPTable table_fabric = new PdfPTable(5); table_fabric.TotalWidth = 570f; float[] fabric_widths = new float[] { 5f, 5f, 5f, 5f, 5f }; table_fabric.SetWidths(fabric_widths); PdfPCell cell_fabric_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_fabric_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; float rowYFab = rowYTittleFab - table_fabric_top.TotalHeight - 5; float allowedRow2HeightFab = rowYFab - printedOnHeight - margin; cell_fabric_center.Phrase = new Phrase("FABRIC", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("NAME", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("DESCRIPTION", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("QUANTITY", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("REMARK", bold_font); table_fabric.AddCell(cell_fabric_center); foreach (var materialModel in viewModel.CostCalculationRetail.CostCalculationRetail_Materials) { if (materialModel.Category.Name == "FAB") { cell_fabric_left.Phrase = new Phrase(materialModel.Category.SubCategory != null ? materialModel.Category.SubCategory : "", normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Material.Name != null ? materialModel.Material.Name : "", normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Description != null ? materialModel.Description : "", normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Quantity != null ? String.Format("{0} " + materialModel.UOMQuantity.Name, materialModel.Quantity) : "0", normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Information != null ? materialModel.Information : "", normal_font); table_fabric.AddCell(cell_fabric_left); } } table_fabric.WriteSelectedRows(0, -1, 10, rowYFab, cb); #endregion #region Accessoris Table Title PdfPTable table_acc_top = new PdfPTable(1); table_acc_top.TotalWidth = 570f; float[] acc_width_top = new float[] { 5f }; table_acc_top.SetWidths(acc_width_top); PdfPCell cell_top_acc = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_top_acc.Phrase = new Phrase("ACCESSORIES", bold_font); table_acc_top.AddCell(cell_top_acc); float rowYTittleAcc = rowYFab - table_fabric.TotalHeight - 10; float allowedRow2HeightTopAcc = rowYTittleFab - printedOnHeight - margin; table_acc_top.WriteSelectedRows(0, -1, 10, rowYTittleAcc, cb); #endregion #region Accessoris Table PdfPTable table_accessories = new PdfPTable(5); table_accessories.TotalWidth = 570f; float[] accessories_widths = new float[] { 5f, 5f, 5f, 5f, 5f }; table_accessories.SetWidths(accessories_widths); PdfPCell cell_acc_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_acc_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; float rowYAcc = rowYTittleAcc - table_fabric_top.TotalHeight - 5; float allowedRow2HeightAcc = rowYAcc - printedOnHeight - margin; cell_acc_center.Phrase = new Phrase("ACCESSORIES", bold_font); table_accessories.AddCell(cell_acc_center); cell_acc_center.Phrase = new Phrase("NAME", bold_font); table_accessories.AddCell(cell_acc_center); cell_acc_center.Phrase = new Phrase("DESCRIPTION", bold_font); table_accessories.AddCell(cell_acc_center); cell_acc_center.Phrase = new Phrase("QUANTITY", bold_font); table_accessories.AddCell(cell_acc_center); cell_acc_center.Phrase = new Phrase("REMARK", bold_font); table_accessories.AddCell(cell_acc_center); foreach (var materialModel in viewModel.CostCalculationRetail.CostCalculationRetail_Materials) { if (materialModel.Category.Name == "ACC") { cell_acc_left.Phrase = new Phrase(materialModel.Category.SubCategory != null ? materialModel.Category.SubCategory : "", normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Material.Name != null ? materialModel.Material.Name : "", normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Description != null ? materialModel.Description : "", normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Quantity != null ? String.Format("{0} " + materialModel.UOMQuantity.Name, materialModel.Quantity) : "0", normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Information != null ? materialModel.Information : "", normal_font); table_accessories.AddCell(cell_acc_left); } } table_accessories.WriteSelectedRows(0, -1, 10, rowYAcc, cb); #endregion #region Ongkos Table Title PdfPTable table_ong_top = new PdfPTable(1); table_ong_top.TotalWidth = 570f; float[] ong_width_top = new float[] { 5f }; table_ong_top.SetWidths(ong_width_top); PdfPCell cell_top_ong = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_top_ong.Phrase = new Phrase("ONGKOS", bold_font); table_ong_top.AddCell(cell_top_ong); float rowYTittleOng = rowYAcc - table_accessories.TotalHeight - 10; float allowedRow2HeightTopOng = rowYTittleOng - printedOnHeight - margin; #endregion #region Ongkos Table PdfPTable table_budget = new PdfPTable(5); table_budget.TotalWidth = 570f; float[] budget_widths = new float[] { 5f, 5f, 5f, 5f, 5f }; table_budget.SetWidths(budget_widths); var ongIndex = 0; PdfPCell cell_budget_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_budget_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; float rowYBudget = rowYTittleOng - table_ong_top.TotalHeight - 5; float allowedRow2HeightBudget = rowYBudget - printedOnHeight - margin; cell_budget_center.Phrase = new Phrase("ONGKOS", bold_font); table_budget.AddCell(cell_budget_center); cell_budget_center.Phrase = new Phrase("NAME", bold_font); table_budget.AddCell(cell_budget_center); cell_budget_center.Phrase = new Phrase("DESCRIPTION", bold_font); table_budget.AddCell(cell_budget_center); cell_budget_center.Phrase = new Phrase("QUANTITY", bold_font); table_budget.AddCell(cell_budget_center); cell_budget_center.Phrase = new Phrase("REMARK", bold_font); table_budget.AddCell(cell_budget_center); foreach (var materialModel in viewModel.CostCalculationRetail.CostCalculationRetail_Materials) { if (materialModel.Category.Name == "ONG") { cell_budget_left.Phrase = new Phrase(materialModel.Category.SubCategory != null ? materialModel.Category.SubCategory : "", normal_font); table_budget.AddCell(cell_budget_left); cell_budget_left.Phrase = new Phrase(materialModel.Material.Name != null ? materialModel.Material.Name : "", normal_font); table_budget.AddCell(cell_budget_left); cell_budget_left.Phrase = new Phrase(materialModel.Description != null ? materialModel.Description : "", normal_font); table_budget.AddCell(cell_budget_left); cell_budget_left.Phrase = new Phrase(materialModel.Quantity != null ? String.Format("{0} " + materialModel.UOMQuantity.Name, materialModel.Quantity) : "0", normal_font); table_budget.AddCell(cell_budget_left); cell_budget_left.Phrase = new Phrase(materialModel.Information != null ? materialModel.Information : "", normal_font); table_budget.AddCell(cell_budget_left); ongIndex++; } } if (ongIndex != 0) { table_budget.WriteSelectedRows(0, -1, 10, rowYBudget, cb); table_ong_top.WriteSelectedRows(0, -1, 10, rowYTittleOng, cb); } #endregion #region Size Breakdown Title PdfPTable table_breakdown_top = new PdfPTable(1); table_breakdown_top.TotalWidth = 570f; float[] breakdown_width_top = new float[] { 5f }; table_breakdown_top.SetWidths(breakdown_width_top); PdfPCell cell_top_breakdown = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_top_breakdown.Phrase = new Phrase("SIZE BREAKDOWN", bold_font); table_breakdown_top.AddCell(cell_top_breakdown); float rowYTittleBreakDown = rowYBudget - table_budget.TotalHeight - 10; float allowedRow2HeightBreakdown = rowYTittleBreakDown - printedOnHeight - margin; table_breakdown_top.WriteSelectedRows(0, -1, 10, rowYTittleBreakDown, cb); #endregion #region == Table Size Breakdown == var tableBreakdownColumn = 3; PdfPCell cell_breakDown_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_breakDown_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_breakDown_total = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_breakDown_total_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; float rowYbreakDown = rowYTittleBreakDown - table_breakdown_top.TotalHeight - 5; float allowedRow2HeightBreakDown = rowYbreakDown - printedOnHeight - margin; var remainingRowToHeightBrekdown = rowYbreakDown - 5 - printedOnHeight - margin; List <String> breakdownSizes = new List <string>(); foreach (var size in viewModel.RO_Retail_SizeBreakdowns) { var sizes = size.SizeQuantity.Keys; foreach (var values in sizes) { if (!breakdownSizes.Contains(values)) { breakdownSizes.Add(values); tableBreakdownColumn++; } } } PdfPTable table_breakDown = new PdfPTable(tableBreakdownColumn); table_breakDown.TotalWidth = 570f; cell_breakDown_center.Phrase = new Phrase("STORE CODE", bold_font); table_breakDown.AddCell(cell_breakDown_center); cell_breakDown_center.Phrase = new Phrase("STORE", bold_font); table_breakDown.AddCell(cell_breakDown_center); foreach (var size in breakdownSizes) { cell_breakDown_center.Phrase = new Phrase(size, bold_font); table_breakDown.AddCell(cell_breakDown_center); } cell_breakDown_center.Phrase = new Phrase("TOTAL", bold_font); table_breakDown.AddCell(cell_breakDown_center); foreach (var productRetail in viewModel.RO_Retail_SizeBreakdowns) { if (productRetail.Total != 0) { cell_breakDown_left.Phrase = new Phrase(productRetail.Store.code != null ? productRetail.Store.code : "", normal_font); table_breakDown.AddCell(cell_breakDown_left); cell_breakDown_left.Phrase = new Phrase(productRetail.Store.name != null ? productRetail.Store.name : "", normal_font); table_breakDown.AddCell(cell_breakDown_left); foreach (var size in productRetail.SizeQuantity) { foreach (var sizeHeader in breakdownSizes) { if (size.Key == sizeHeader) { cell_breakDown_left.Phrase = new Phrase(size.Value.ToString() != null ? size.Value.ToString() : "0", normal_font); table_breakDown.AddCell(cell_breakDown_left); } } } cell_breakDown_left.Phrase = new Phrase(productRetail.Total.ToString() != null ? productRetail.Total.ToString() : "0", normal_font); table_breakDown.AddCell(cell_breakDown_left); } var tableBreakdownCurrentHeight = table_breakDown.TotalHeight; if (tableBreakdownCurrentHeight / remainingRowToHeightBrekdown > 1) { if (tableBreakdownCurrentHeight / allowedRow2HeightBreakDown > 1) { PdfPRow headerRow = table_breakDown.GetRow(0); PdfPRow lastRow = table_breakDown.GetRow(table_breakDown.Rows.Count - 1); table_breakDown.DeleteLastRow(); table_breakDown.WriteSelectedRows(0, -1, 10, rowYbreakDown, cb); table_breakDown.DeleteBodyRows(); this.DrawPrintedOn(now, bf, cb); document.NewPage(); table_breakDown.Rows.Add(headerRow); table_breakDown.Rows.Add(lastRow); table_breakDown.CalculateHeights(); rowYbreakDown = startY; remainingRowToHeightBrekdown = rowYbreakDown - 5 - printedOnHeight - margin; allowedRow2HeightBreakDown = remainingRowToHeightBrekdown - printedOnHeight - margin; } } } cell_breakDown_total.Phrase = new Phrase(" ", bold_font); table_breakDown.AddCell(cell_breakDown_total); cell_breakDown_total_2.Phrase = new Phrase("TOTAL", bold_font); table_breakDown.AddCell(cell_breakDown_total_2); foreach (var sizeTotal in viewModel.SizeQuantityTotal) { cell_breakDown_left.Phrase = new Phrase(sizeTotal.Value.ToString() != null ? sizeTotal.Value.ToString() : "0", normal_font); table_breakDown.AddCell(cell_breakDown_left); } cell_breakDown_left.Phrase = new Phrase(viewModel.Total.ToString() != null ? viewModel.Total.ToString() : "0", normal_font); table_breakDown.AddCell(cell_breakDown_left); table_breakDown.WriteSelectedRows(0, -1, 10, rowYbreakDown, cb); #endregion #region Table Instruksi PdfPTable table_instruction = new PdfPTable(1); float[] instruction_widths = new float[] { 5f }; table_instruction.TotalWidth = 500f; table_instruction.SetWidths(instruction_widths); PdfPCell cell_top_instruction = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; PdfPCell cell_colon_instruction = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE }; PdfPCell cell_top_keterangan_instruction = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2, Colspan = 7 }; cell_top_instruction.Phrase = new Phrase("INSTRUCTION", normal_font); table_instruction.AddCell(cell_top_instruction); table_instruction.AddCell(cell_colon_instruction); cell_top_keterangan_instruction.Phrase = new Phrase($"{viewModel.Instruction}", normal_font); table_instruction.AddCell(cell_top_keterangan_instruction); float rowYInstruction = rowYbreakDown - table_breakDown.TotalHeight - 5; float allowedRow2HeightInstruction = rowYInstruction - printedOnHeight - margin; var remainingRowToHeightInstruction = rowYInstruction - 5 - printedOnHeight - margin; var tableInstructionCurrentHeight = table_instruction.TotalHeight; if (remainingRowToHeightInstruction < 0) { remainingRowToHeightInstruction = remainingRowToHeightInstruction * -1; } if (allowedRow2HeightInstruction < 0) { allowedRow2HeightInstruction = allowedRow2HeightInstruction * -1; } if (tableInstructionCurrentHeight / remainingRowToHeightInstruction > 1) { if (tableInstructionCurrentHeight / allowedRow2HeightInstruction > 1) { PdfPRow headerRow = table_instruction.GetRow(0); PdfPRow lastRow = table_instruction.GetRow(table_instruction.Rows.Count - 1); table_instruction.DeleteLastRow(); table_instruction.WriteSelectedRows(0, -1, 10, rowYInstruction, cb); table_instruction.DeleteBodyRows(); this.DrawPrintedOn(now, bf, cb); document.NewPage(); table_instruction.Rows.Add(headerRow); table_instruction.Rows.Add(lastRow); table_instruction.CalculateHeights(); rowYInstruction = startY; remainingRowToHeightInstruction = rowYInstruction - 5 - printedOnHeight - margin; allowedRow2HeightInstruction = remainingRowToHeightInstruction - printedOnHeight - margin; } } table_instruction.WriteSelectedRows(0, -1, 10, rowYInstruction, cb); #endregion #region RO Image var countImageRo = 0; byte[] roImage; foreach (var index in viewModel.ImagesFile) { countImageRo++; } if (countImageRo > 5) { countImageRo = 5; } PdfPTable table_ro_image = new PdfPTable(countImageRo); float[] ro_widths = new float[countImageRo]; for (var i = 0; i < countImageRo; i++) { ro_widths.SetValue(5f, i); } if (countImageRo != 0) { table_ro_image.SetWidths(ro_widths); } table_ro_image.TotalWidth = 570f; float rowYRoImage = rowYInstruction - table_instruction.TotalHeight - 5; foreach (var imageFromRo in viewModel.ImagesFile) { try { roImage = Convert.FromBase64String(Base64.GetBase64File(imageFromRo)); } catch (Exception) { var webClient = new WebClient(); roImage = webClient.DownloadData("https://bateeqstorage.blob.core.windows.net/other/no-image.jpg"); } Image images = Image.GetInstance(imgb: roImage); if (images.Width > 60) { float percentage = 0.0f; percentage = 60 / images.Width; images.ScalePercent(percentage * 100); } PdfPCell imageCell = new PdfPCell(images); imageCell.Border = 0; table_ro_image.AddCell(imageCell); } PdfPCell cell_image = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, }; foreach (var name in viewModel.ImagesName) { cell_image.Phrase = new Phrase(name, normal_font); table_ro_image.AddCell(cell_image); } table_ro_image.WriteSelectedRows(0, -1, 10, rowYRoImage, cb); #endregion #region Signature (Bottom, Column 1.2) PdfPTable table_signature = new PdfPTable(6); table_signature.TotalWidth = 570f; float[] signature_widths = new float[] { 1f, 1f, 1f, 1f, 1f, 1f }; table_signature.SetWidths(signature_widths); PdfPCell cell_signature = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, }; PdfPCell cell_signature_noted = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, PaddingTop = 50 }; cell_signature.Phrase = new Phrase("Dibuat", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Kasie Merchandiser", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("R & D", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka Produksi", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Mengetahui", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Menyetujui", normal_font); table_signature.AddCell(cell_signature); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("(Haenis Gunarto)", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("(Michelle Tjokrosaputro)", normal_font); table_signature.AddCell(cell_signature_noted); float table_signatureY = rowYRoImage - table_ro_image.TotalHeight - 5; table_signature.WriteSelectedRows(0, -1, 10, table_signatureY, cb); #endregion this.DrawPrintedOn(now, bf, cb); document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }
public MemoryStream GeneratePdfTemplate(CostCalculationGarmentViewModel viewModel, int timeoffset) { BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); BaseFont bf_bold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); DateTime now = DateTime.Now; Document document = new Document(PageSize.A4, 10, 10, 10, 10); MemoryStream stream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.CloseStream = false; document.Open(); PdfContentByte cb = writer.DirectContent; float margin = 10; float printedOnHeight = 10; float startY = 840 - margin; PdfPCell cell_colon = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Phrase = new Phrase(":", normal_font) }; #region Header cb.BeginText(); cb.SetFontAndSize(bf, 10); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "PT. DAN LIRIS", 10, 820, 0); cb.SetFontAndSize(bf_bold, 12); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "BUDGET EXPORT GARMENT", 10, 805, 0); cb.EndText(); #endregion #region Detail 1 (Top) PdfPTable table_detail1 = new PdfPTable(9); table_detail1.TotalWidth = 570f; float[] detail1_widths = new float[] { 1f, 0.1f, 2f, 1f, 0.1f, 2f, 1.5f, 0.1f, 2f }; table_detail1.SetWidths(detail1_widths); PdfPCell cell_detail1 = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_detail1.Phrase = new Phrase("RO", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.RO_Number}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("SECTION", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.Section}", normal_font); table_detail1.AddCell(cell_detail1); cell_detail1.Phrase = new Phrase("CONFIRM ORDER", normal_font); table_detail1.AddCell(cell_detail1); table_detail1.AddCell(cell_colon); cell_detail1.Phrase = new Phrase($"{viewModel.ConfirmDate.AddHours(timeoffset).ToString("dd/MM/yyyy")}", normal_font); table_detail1.AddCell(cell_detail1); #endregion #region Draw Detail 1 float row1Y = 800; table_detail1.WriteSelectedRows(0, -1, 10, row1Y, cb); #endregion bool isDollar = viewModel.Rate.Id != 0; #region Detail 2 (Bottom, Column 1) PdfPTable table_detail2 = new PdfPTable(2); table_detail2.TotalWidth = 230f; float[] detail2_widths = new float[] { 2f, 5f }; table_detail2.SetWidths(detail2_widths); PdfPCell cell_detail2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; cell_detail2.Phrase = new Phrase("BUYER", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.Buyer.name}", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("ARTICLE", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.Article}", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("DESCRIPTION", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.CommodityDescription}", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("QTY", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.Quantity} PCS", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase("DELIVERY", normal_font); table_detail2.AddCell(cell_detail2); cell_detail2.Phrase = new Phrase($"{viewModel.DeliveryDate.AddHours(timeoffset).ToString("dd/MM/yyyy")}", normal_font); table_detail2.AddCell(cell_detail2); #endregion #region Detail 3 (Bottom, Column 2) PdfPTable table_detail3 = new PdfPTable(8); table_detail3.TotalWidth = 330f; float[] detail3_widths = new float[] { 3.25f, 4.75f, 1.9f, 0.2f, 1.9f, 1.9f, 0.2f, 1.9f }; table_detail3.SetWidths(detail3_widths); double budgetCost = isDollar ? viewModel.ConfirmPrice * viewModel.Rate.Value ?? 0 : viewModel.ConfirmPrice ?? 0; double totalBudget = budgetCost * viewModel.Quantity ?? 0; PdfPCell cell_detail3 = new PdfPCell() { HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; PdfPCell cell_detail3_right = new PdfPCell() { HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7 }; PdfPCell cell_detail3_colspan6 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7, Colspan = 6 }; PdfPCell cell_detail3_colspan8 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 2, PaddingBottom = 7, PaddingLeft = 2, PaddingTop = 7, Colspan = 8 }; cell_detail3.Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("TOTAL BUDGET", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.TOP_BORDER | Rectangle.RIGHT_BORDER; cell_detail3.Phrase = new Phrase($"{Number.ToRupiah(totalBudget)}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3_colspan6.Phrase = new Phrase("STANDARD HOURS", normal_font); table_detail3.AddCell(cell_detail3_colspan6); double freightCost = 0; foreach (CostCalculationGarment_MaterialViewModel item in viewModel.CostCalculationGarment_Materials) { freightCost += item.TotalShippingFee; } cell_detail3.Border = Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("BEA ANGKUT", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.RIGHT_BORDER; cell_detail3.Phrase = new Phrase($"{Number.ToRupiah(freightCost)}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("SMV. CUT", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.NO_BORDER; cell_detail3.Phrase = new Phrase($"{viewModel.SMV_Cutting}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.NO_BORDER; cell_detail3.Phrase = new Phrase("SMV. SEW", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.RIGHT_BORDER; cell_detail3.Phrase = new Phrase($"{viewModel.SMV_Sewing}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER; cell_detail3.Phrase = new Phrase("", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.LEFT_BORDER; cell_detail3.Phrase = new Phrase("SMV. FIN", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.BOTTOM_BORDER; cell_detail3.Phrase = new Phrase($"{viewModel.SMV_Finishing}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3.Border = Rectangle.BOTTOM_BORDER; cell_detail3.Phrase = new Phrase("SMV. TOT", normal_font); table_detail3.AddCell(cell_detail3); table_detail3.AddCell(cell_colon); cell_detail3.Border = Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER; cell_detail3.Phrase = new Phrase($"{viewModel.SMV_Total}", normal_font); table_detail3.AddCell(cell_detail3); cell_detail3_colspan8.Phrase = new Phrase("BUDGET COST / PCS" + "".PadRight(5) + $"{Number.ToRupiah(budgetCost)}", normal_font); table_detail3.AddCell(cell_detail3_colspan8); cell_detail3_colspan8.Phrase = isDollar ? new Phrase($"US$ 1 = {Number.ToRupiah(viewModel.Rate.Value)}" + "".PadRight(10) + $"CONFIRM PRICE : {Number.ToDollar(viewModel.ConfirmPrice)} / PCS", normal_font) : new Phrase($"CONFIRM PRICE : {Number.ToRupiah(viewModel.ConfirmPrice)} / PCS", normal_font); table_detail3.AddCell(cell_detail3_colspan8); cell_detail3_colspan8.Border = Rectangle.NO_BORDER; cell_detail3_colspan8.HorizontalAlignment = Element.ALIGN_CENTER; cell_detail3_colspan8.Phrase = new Phrase($"ALLOWANCE >> FABRIC = {viewModel.FabricAllowance}%, ACC = {viewModel.AccessoriesAllowance}%", normal_font); table_detail3.AddCell(cell_detail3_colspan8); #endregion #region Signature PdfPTable table_signature = new PdfPTable(5); table_signature.TotalWidth = 570f; float[] signature_widths = new float[] { 1f, 1f, 1f, 1f, 1f }; table_signature.SetWidths(signature_widths); PdfPCell cell_signature = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("", normal_font); table_signature.AddCell(cell_signature); string signatureArea = string.Empty; for (int i = 0; i < 5; i++) { signatureArea += Environment.NewLine; } cell_signature.Phrase = new Phrase(signatureArea, normal_font); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("(................)", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("(................)", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("(................)", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("(................)", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("(................)", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Penjualan", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Sie/Ka. Bag Penjualan", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Bag Pembelian", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Div Produksi Garment", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka. Div Penjualan", normal_font); table_signature.AddCell(cell_signature); #endregion #region Cost Calculation Material PdfPTable table_ccm = new PdfPTable(10); table_ccm.TotalWidth = 570f; float[] ccm_widths = new float[] { 1f, 3f, 3f, 6f, 2f, 3f, 3f, 2f, 3f, 3f }; table_ccm.SetWidths(ccm_widths); PdfPCell cell_ccm = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_ccm.Phrase = new Phrase("NO", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("CATEGORIES", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("KODE PRODUK", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("DESCRIPTION", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("USAGE", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("PRICE", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("QUANTITY", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("UNIT", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("AMOUNT", bold_font); table_ccm.AddCell(cell_ccm); cell_ccm.Phrase = new Phrase("PO NUMBER", bold_font); table_ccm.AddCell(cell_ccm); float row2Y = row1Y - table_detail1.TotalHeight - 10; float row3Height = table_detail2.TotalHeight > table_detail3.TotalHeight ? table_detail2.TotalHeight : table_detail3.TotalHeight; float row2RemainingHeight = row2Y - 10 - row3Height - printedOnHeight - margin; float row2AllowedHeight = row2Y - printedOnHeight - margin; for (int i = 0; i < viewModel.CostCalculationGarment_Materials.Count; i++) { //NO cell_ccm.Phrase = new Phrase((i + 1).ToString(), normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_LEFT; //CATEGORY cell_ccm.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].Category.name, normal_font); table_ccm.AddCell(cell_ccm); //KODE PRODUK cell_ccm.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].Product.code, normal_font); table_ccm.AddCell(cell_ccm); //DESCRIPTION cell_ccm.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].Description, normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_RIGHT; double usage = viewModel.CostCalculationGarment_Materials[i].Quantity ?? 0; cell_ccm.Phrase = new Phrase(usage.ToString(), normal_font); table_ccm.AddCell(cell_ccm); double price = viewModel.CostCalculationGarment_Materials[i].Price ?? 0; cell_ccm.Phrase = new Phrase(String.Format("{0}/{1}", Number.ToRupiahWithoutSymbol(price), viewModel.CostCalculationGarment_Materials[i].UOMPrice.unit), normal_font); table_ccm.AddCell(cell_ccm); double factor; if (viewModel.CostCalculationGarment_Materials[i].Category.name == "FABRIC") { factor = viewModel.FabricAllowance ?? 0; } else { factor = viewModel.AccessoriesAllowance ?? 0; } double totalQuantity = viewModel.Quantity ?? 0; double quantity = (100 + factor) / 100 * usage * totalQuantity; cell_ccm.Phrase = new Phrase(quantity.ToString(), normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_CENTER; cell_ccm.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].UOMQuantity.unit, normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_RIGHT; double amount = quantity * price; cell_ccm.Phrase = new Phrase(Number.ToRupiahWithoutSymbol(amount), normal_font); table_ccm.AddCell(cell_ccm); cell_ccm.HorizontalAlignment = Element.ALIGN_CENTER; cell_ccm.Phrase = new Phrase(viewModel.CostCalculationGarment_Materials[i].PO_SerialNumber, normal_font); table_ccm.AddCell(cell_ccm); float currentHeight = table_ccm.TotalHeight; if (currentHeight / row2RemainingHeight > 1) { if (currentHeight / row2AllowedHeight > 1) { PdfPRow headerRow = table_ccm.GetRow(0); PdfPRow lastRow = table_ccm.GetRow(table_ccm.Rows.Count - 1); table_ccm.DeleteLastRow(); table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); table_ccm.DeleteBodyRows(); this.DrawPrintedOn(now, bf, cb); document.NewPage(); table_ccm.Rows.Add(headerRow); table_ccm.Rows.Add(lastRow); table_ccm.CalculateHeights(); row2Y = startY; row2RemainingHeight = row2Y - 10 - row3Height - printedOnHeight - margin; row2AllowedHeight = row2Y - printedOnHeight - margin; } } } #endregion #region Draw Others table_ccm.WriteSelectedRows(0, -1, 10, row2Y, cb); float row3Y = row2Y - table_ccm.TotalHeight - 10; float row3RemainigHeight = row3Y - printedOnHeight - margin; if (row3RemainigHeight < row3Height) { this.DrawPrintedOn(now, bf, cb); row3Y = startY; document.NewPage(); } table_detail2.WriteSelectedRows(0, -1, margin, row3Y, cb); table_detail3.WriteSelectedRows(0, -1, margin + table_detail2.TotalWidth + 10, row3Y, cb); float signatureY = row3Y - row3Height - 10; float signatureRemainingHeight = signatureY - printedOnHeight - margin; if (signatureRemainingHeight < table_signature.TotalHeight) { this.DrawPrintedOn(now, bf, cb); signatureY = startY; document.NewPage(); } table_signature.WriteSelectedRows(0, -1, margin, signatureY, cb); this.DrawPrintedOn(now, bf, cb); #endregion document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }
private void LayoutCompleted(object sender, PdfLayout.LayoutEventArgs e) { var pdfLayout = sender as PdfLayout; var layout = this.layoutInstances .Where(x => x.Key.Equals(pdfLayout)) .Single(); Exception toThrow = null; lock (layout.Value) { try { var numeroMaxOpzioni = e.MessagesWithOptions .Max(x => x.Options.Length); //PdfPTable tabella = new PdfPTable(new[] { e.MaxMessageLength, e.MaxOptionLength }), tabellaOpzione; //PdfPTable tabella = new PdfPTable(new[] { 20.0f, 80.0f }), tabellaOpzione; PdfPTable tabella = new PdfPTable(2), tabellaOpzione; tabella.WidthPercentage = 100.0f; PdfPCell cellaMessaggio, cellaOpzione; int optCount; foreach (var elemento in e.MessagesWithOptions) { cellaMessaggio = this.createCellTemplate(elemento.Message); tabellaOpzione = new PdfPTable(numeroMaxOpzioni); tabellaOpzione.WidthPercentage = 100.0f; optCount = 0; foreach (var opzione in elemento.Options) { cellaOpzione = this.createCellTemplate(opzione, true, elemento.SelectedValue, elemento.Options.Length < 2 && elemento.SelectedValue != null); tabellaOpzione.AddCell(cellaOpzione); optCount++; } for (; optCount < numeroMaxOpzioni; optCount++) { cellaOpzione = new PdfPCell(new Phrase()); cellaOpzione.Border = Rectangle.NO_BORDER; tabellaOpzione.AddCell(cellaOpzione); } tabella.AddCell(cellaMessaggio); tabella.AddCell(new PdfPCell(tabellaOpzione, this.CellStyle)); } //Calcola le dimensioni effettive della form. var w1 = 0.0f; var w2 = 0.0f; #region AMPIEZZA var totWidth = e.MaxMessageLength + optCfg.Spacing.Value; totWidth += (e.MaxOptionLength + optCfg.Width.Value + optCfg.Spacing.Value) * numeroMaxOpzioni + optCfg.Spacing.Value; //Controlla se l'ampiezza minima è impostata o se l'ampiezza viene calcolata automaticamente. if (msgConfig.Width.HasValue && totWidth < msgConfig.Width.Value) //Tiene conto dell'ampiezza minima solo se { //CASO 1: casella singola senza opzioni. if (e.MessagesWithOptions.All(x => x.Options == null || x.Options.Length < 2 || x.Options.All(o => (o ?? string.Empty).Trim().Length < 1))) { w1 = msgConfig.Width.Value - optCfg.Width.Value - optCfg.Spacing.Value; w2 = optCfg.Width.Value + optCfg.Spacing.Value; } else //CASO 2: una o più caselle con o senza opzioni. { w2 = (e.MaxOptionLength + optCfg.Width.Value + optCfg.Spacing.Value) * numeroMaxOpzioni + optCfg.Spacing.Value; w1 = Math.Abs(msgConfig.Width.Value - w2); } } else //Ampiezza calcolata automaticamente in funzione delle dimensioni massime delle celle. { w1 = e.MaxMessageLength + optCfg.Spacing.Value; w2 = (e.MaxOptionLength + optCfg.Width.Value + optCfg.Spacing.Value) * numeroMaxOpzioni + optCfg.Spacing.Value; } //Imposta l'ampiezza definitiva. tabella.SetTotalWidth(new[] { w1, w2 }); #endregion #region LARGHEZZA var larghezzaTotale = tabella.CalculateHeights(); if (msgConfig.Height.HasValue && tabella.Rows.Count > 0 && larghezzaTotale < msgConfig.Height.Value) { //Aggiunge una riga vuota (due celle alte N). var differenza = msgConfig.Height.Value - larghezzaTotale; var cellaVuota = this.CellStyle; //cellaVuota.MinimumHeight = differenza; cellaVuota.FixedHeight = differenza; tabella.AddCell(cellaVuota); tabella.AddCell(cellaVuota); } #endregion //Disegna i bordi... tabella = this.drawTableBorders(ref tabella); //...e scrive la tabella nel documento. tabella.WriteSelectedRows(0, tabella.Rows.Count, msgConfig.X.Value, msgConfig.Y.Value, this.canvas); } catch (Exception ex) { toThrow = ex; } } if (toThrow != null) { throw toThrow; } }
public MemoryStream GeneratePdfTemplate(RO_GarmentViewModel viewModel, int offset) { //set pdf stream MemoryStream stream = new MemoryStream(); Document document = new Document(PageSize.A4, 10, 10, 10, 10); PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.CloseStream = false; document.Open(); PdfContentByte cb = writer.DirectContent; //set content configuration BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); BaseFont bf_bold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font_8 = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 8); Font font_9 = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 9); DateTime now = DateTime.Now; float margin = 10; float printedOnHeight = 10; float startY = 840 - margin; #region Header cb.BeginText(); cb.SetFontAndSize(bf, 10); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "PT. DANLIRIS", 10, 820, 0); cb.SetFontAndSize(bf_bold, 12); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "RO EKSPOR GARMENT", 10, 805, 0); cb.EndText(); #endregion #region Top PdfPTable table_top = new PdfPTable(9); float[] top_widths = new float[] { 1f, 0.1f, 2f, 1f, 0.1f, 2f, 1.2f, 0.1f, 2f }; table_top.TotalWidth = 500f; table_top.SetWidths(top_widths); PdfPCell cell_top = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_TOP, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; PdfPCell cell_colon = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_TOP }; PdfPCell cell_top_keterangan = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_TOP, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2, Colspan = 7 }; cell_colon.Phrase = new Phrase(":", normal_font); cell_top.Phrase = new Phrase("NO RO", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.RO_Number}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("SECTION", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.Section}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("DATE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.ConfirmDate.AddHours(offset).ToString("dd MMMM yyyy")}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("Konveksi", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.Unit.Code}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("BUYER", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.BuyerBrand.Name}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("DELIVERY DATE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.DeliveryDate.AddHours(offset).ToString("dd MMMM yyyy")}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("DESC", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.Description}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("QUANTITY", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.Total.ToString()} {viewModel.CostCalculationGarment.UOM.Unit}", normal_font); table_top.AddCell(cell_top); cell_top.Phrase = new Phrase("SIZE RANGE", normal_font); table_top.AddCell(cell_top); table_top.AddCell(cell_colon); cell_top.Phrase = new Phrase($"{viewModel.CostCalculationGarment.SizeRange}", normal_font); table_top.AddCell(cell_top); byte[] imageByte; try { imageByte = Convert.FromBase64String(Base64.GetBase64File(viewModel.CostCalculationGarment.ImageFile)); } catch (Exception) { var webClient = new WebClient(); imageByte = webClient.DownloadData("http://babakunyho.eu/img/default-no-image.png"); } Image image = Image.GetInstance(imgb: imageByte); if (image.Width > 60) { float percentage = 0.0f; percentage = 60 / image.Width; image.ScalePercent(percentage * 100); } float row1Y = 800; float imageY = 800 - image.ScaledHeight; image.SetAbsolutePosition(520, imageY); cb.AddImage(image, inlineImage: true); table_top.WriteSelectedRows(0, -1, 10, row1Y, cb); #endregion #region Table Fabric //Fabric title PdfPTable table_fabric_top = new PdfPTable(1); table_fabric_top.TotalWidth = 570f; float[] fabric_widths_top = new float[] { 5f }; table_fabric_top.SetWidths(fabric_widths_top); PdfPCell cell_top_fabric = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_top_fabric.Phrase = new Phrase("FABRIC", bold_font); table_fabric_top.AddCell(cell_top_fabric); float row1Height = image.ScaledHeight > table_top.TotalHeight ? image.ScaledHeight : table_top.TotalHeight; float rowYTittleFab = row1Y - row1Height - 10; float allowedRow2Height = rowYTittleFab - printedOnHeight - margin; table_fabric_top.WriteSelectedRows(0, -1, 10, rowYTittleFab, cb); //Main fabric table PdfPTable table_fabric = new PdfPTable(8); table_fabric.TotalWidth = 570f; float[] fabric_widths = new float[] { 5f, 5f, 5f, 5f, 5f, 5f, 5f, 5f }; table_fabric.SetWidths(fabric_widths); PdfPCell cell_fabric_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_fabric_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; float rowYFab = rowYTittleFab - table_fabric_top.TotalHeight - 5; float allowedRow2HeightFab = rowYFab - printedOnHeight - margin; //cell_fabric_center.Phrase = new Phrase("FABRIC", bold_font); //table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("PRODUCT CODE", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("COMPOSITION", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("CONSTRUCTION", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("YARN", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("WIDTH", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("DESCRIPTION", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("QUANTITY", bold_font); table_fabric.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("REMARK", bold_font); table_fabric.AddCell(cell_fabric_center); foreach (var materialModel in viewModel.CostCalculationGarment.CostCalculationGarment_Materials) { if (materialModel.Category.name == "FABRIC") { //cell_fabric_left.Phrase = new Phrase(materialModel.Category.SubCategory != null ? materialModel.Category.SubCategory : "", normal_font); //table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Product.Code, normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Product.Composition, normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Product.Const, normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Product.Yarn, normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Product.Width, normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Description != null ? materialModel.Description : "", normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Quantity.ToString() != null ? String.Format("{0} " + materialModel.UOMQuantity.Unit, materialModel.Quantity.ToString()) : "0", normal_font); table_fabric.AddCell(cell_fabric_left); cell_fabric_left.Phrase = new Phrase(materialModel.Information != null ? materialModel.Information : "", normal_font); table_fabric.AddCell(cell_fabric_left); } } table_fabric.WriteSelectedRows(0, -1, 10, rowYFab, cb); #endregion #region Table Accessories //Accessories Title PdfPTable table_acc_top = new PdfPTable(1); table_acc_top.TotalWidth = 570f; float[] acc_width_top = new float[] { 5f }; table_acc_top.SetWidths(acc_width_top); PdfPCell cell_top_acc = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_top_acc.Phrase = new Phrase("ACCESSORIES", bold_font); table_acc_top.AddCell(cell_top_acc); float rowYTittleAcc = rowYFab - table_fabric.TotalHeight - 10; float allowedRow2HeightTopAcc = rowYTittleFab - printedOnHeight - margin; table_acc_top.WriteSelectedRows(0, -1, 10, rowYTittleAcc, cb); //Main Accessories Table PdfPTable table_accessories = new PdfPTable(8); table_accessories.TotalWidth = 570f; float[] accessories_widths = new float[] { 5f, 5f, 5f, 5f, 5f, 5f, 5f, 5f }; table_accessories.SetWidths(accessories_widths); PdfPCell cell_acc_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_acc_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; float rowYAcc = rowYTittleAcc - table_fabric_top.TotalHeight - 5; float allowedRow2HeightAcc = rowYAcc - printedOnHeight - margin; //cell_acc_center.Phrase = new Phrase("ACCESSORIES", bold_font); //table_accessories.AddCell(cell_acc_center); cell_fabric_center.Phrase = new Phrase("PRODUCT CODE", bold_font); table_accessories.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("COMPOSITION", bold_font); table_accessories.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("CONSTRUCTION", bold_font); table_accessories.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("YARN", bold_font); table_accessories.AddCell(cell_fabric_center); cell_fabric_center.Phrase = new Phrase("WIDTH", bold_font); table_accessories.AddCell(cell_fabric_center); cell_acc_center.Phrase = new Phrase("DESCRIPTION", bold_font); table_accessories.AddCell(cell_acc_center); cell_acc_center.Phrase = new Phrase("QUANTITY", bold_font); table_accessories.AddCell(cell_acc_center); cell_acc_center.Phrase = new Phrase("REMARK", bold_font); table_accessories.AddCell(cell_acc_center); foreach (var materialModel in viewModel.CostCalculationGarment.CostCalculationGarment_Materials) { if (materialModel.Category.name != "FABRIC") { cell_acc_left.Phrase = new Phrase(materialModel.Product.Code, normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Product.Composition, normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Product.Const, normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Product.Yarn, normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Product.Width, normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Description != null ? materialModel.Description : "", normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Quantity != null ? String.Format("{0} " + materialModel.UOMQuantity.Unit, materialModel.Quantity.ToString()) : "0", normal_font); table_accessories.AddCell(cell_acc_left); cell_acc_left.Phrase = new Phrase(materialModel.Information != null ? materialModel.Information : "", normal_font); table_accessories.AddCell(cell_acc_left); } } table_accessories.WriteSelectedRows(0, -1, 10, rowYAcc, cb); #endregion #region Table Size Breakdown //Title PdfPTable table_breakdown_top = new PdfPTable(1); table_breakdown_top.TotalWidth = 570f; float[] breakdown_width_top = new float[] { 5f }; table_breakdown_top.SetWidths(breakdown_width_top); PdfPCell cell_top_breakdown = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; cell_top_breakdown.Phrase = new Phrase("SIZE BREAKDOWN", bold_font); table_breakdown_top.AddCell(cell_top_breakdown); float rowYTittleBreakDown = rowYAcc - table_accessories.TotalHeight - 10; float allowedRow2HeightBreakdown = rowYTittleBreakDown - printedOnHeight - margin; table_breakdown_top.WriteSelectedRows(0, -1, 10, rowYTittleBreakDown, cb); //Main Table Size Breakdown PdfPTable table_breakDown = new PdfPTable(2); table_breakDown.TotalWidth = 570f; float[] breakDown_widths = new float[] { 5f, 10f }; table_breakDown.SetWidths(breakDown_widths); PdfPCell cell_breakDown_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_breakDown_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_breakDown_total = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_breakDown_total_2 = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; float rowYbreakDown = rowYTittleBreakDown - table_breakdown_top.TotalHeight - 5; float allowedRow2HeightBreakDown = rowYbreakDown - printedOnHeight - margin; var remainingRowToHeightBrekdown = rowYbreakDown - 5 - printedOnHeight - margin; cell_breakDown_center.Phrase = new Phrase("WARNA", bold_font); table_breakDown.AddCell(cell_breakDown_center); cell_breakDown_center.Phrase = new Phrase("SIZE RANGE", bold_font); table_breakDown.AddCell(cell_breakDown_center); foreach (var productRetail in viewModel.RO_Garment_SizeBreakdowns) { if (productRetail.Total != 0) { cell_breakDown_left.Phrase = new Phrase(productRetail.Color.Name != null ? productRetail.Color.Name : "", normal_font); table_breakDown.AddCell(cell_breakDown_left); PdfPTable table_breakDown_child = new PdfPTable(3); table_breakDown_child.TotalWidth = 300f; float[] breakDown_child_widths = new float[] { 5f, 5f, 5f }; table_breakDown_child.SetWidths(breakDown_child_widths); PdfPCell cell_breakDown_child_center = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; PdfPCell cell_breakDown_child_left = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2 }; cell_breakDown_child_center.Phrase = new Phrase("KETERANGAN", bold_font); table_breakDown_child.AddCell(cell_breakDown_child_center); cell_breakDown_child_center.Phrase = new Phrase("SIZE", bold_font); table_breakDown_child.AddCell(cell_breakDown_child_center); cell_breakDown_child_center.Phrase = new Phrase("QUANTITY", bold_font); table_breakDown_child.AddCell(cell_breakDown_child_center); foreach (var size in productRetail.RO_Garment_SizeBreakdown_Details) { cell_breakDown_child_left.Phrase = new Phrase(size.Information != null ? size.Information : "", normal_font); table_breakDown_child.AddCell(cell_breakDown_child_left); cell_breakDown_child_left.Phrase = new Phrase(size.Size != null ? size.Size : "", normal_font); table_breakDown_child.AddCell(cell_breakDown_child_left); cell_breakDown_child_left.Phrase = new Phrase(size.Quantity.ToString() != null ? size.Quantity.ToString() : "0", normal_font); table_breakDown_child.AddCell(cell_breakDown_child_left); } cell_breakDown_child_left.Phrase = new Phrase(" ", bold_font); table_breakDown_child.AddCell(cell_breakDown_child_left); cell_breakDown_child_left.Phrase = new Phrase("TOTAL", bold_font); table_breakDown_child.AddCell(cell_breakDown_child_left); cell_breakDown_child_left.Phrase = new Phrase(productRetail.Total.ToString() != null ? productRetail.Total.ToString() : "0", normal_font); table_breakDown_child.AddCell(cell_breakDown_child_left); table_breakDown_child.WriteSelectedRows(0, -1, 10, 0, cb); table_breakDown.AddCell(table_breakDown_child); } var tableBreakdownCurrentHeight = table_breakDown.TotalHeight; if (tableBreakdownCurrentHeight / remainingRowToHeightBrekdown > 1) { if (tableBreakdownCurrentHeight / allowedRow2HeightBreakDown > 1) { PdfPRow headerRow = table_breakDown.GetRow(0); PdfPRow lastRow = table_breakDown.GetRow(table_breakDown.Rows.Count - 1); table_breakDown.DeleteLastRow(); table_breakDown.WriteSelectedRows(0, -1, 10, rowYbreakDown, cb); table_breakDown.DeleteBodyRows(); this.DrawPrintedOn(now, bf, cb); document.NewPage(); table_breakDown.Rows.Add(headerRow); table_breakDown.Rows.Add(lastRow); table_breakDown.CalculateHeights(true); rowYbreakDown = startY; remainingRowToHeightBrekdown = rowYbreakDown - 5 - printedOnHeight - margin; allowedRow2HeightBreakDown = remainingRowToHeightBrekdown - printedOnHeight - margin; } } } cell_breakDown_total_2.Phrase = new Phrase("TOTAL", bold_font); table_breakDown.AddCell(cell_breakDown_total_2); cell_breakDown_total_2.Phrase = new Phrase(viewModel.Total.ToString(), bold_font); table_breakDown.AddCell(cell_breakDown_total_2); table_breakDown.WriteSelectedRows(0, -1, 10, rowYbreakDown, cb); #endregion #region Table Instruksi //Title PdfPTable table_instruction = new PdfPTable(1); float[] instruction_widths = new float[] { 5f }; table_instruction.TotalWidth = 500f; table_instruction.SetWidths(instruction_widths); PdfPCell cell_top_instruction = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2 }; PdfPCell cell_colon_instruction = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE }; PdfPCell cell_top_keterangan_instruction = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, PaddingRight = 1, PaddingBottom = 2, PaddingTop = 2, Colspan = 7 }; cell_top_instruction.Phrase = new Phrase("INSTRUCTION", normal_font); table_instruction.AddCell(cell_top_instruction); table_instruction.AddCell(cell_colon_instruction); cell_top_keterangan_instruction.Phrase = new Phrase($"{viewModel.Instruction}", normal_font); table_instruction.AddCell(cell_top_keterangan_instruction); float rowYInstruction = rowYbreakDown - table_breakDown.TotalHeight - 10; float allowedRow2HeightInstruction = rowYInstruction - printedOnHeight - margin; table_instruction.WriteSelectedRows(0, -1, 10, rowYInstruction, cb); #endregion #region RO Image var countImageRo = 0; byte[] roImage; foreach (var index in viewModel.ImagesFile) { countImageRo++; } float rowYRoImage = rowYInstruction - table_instruction.TotalHeight - 10; float imageRoHeight; if (countImageRo != 0) { if (countImageRo > 5) { countImageRo = 5; } PdfPTable table_ro_image = new PdfPTable(countImageRo); float[] ro_widths = new float[countImageRo]; for (var i = 0; i < countImageRo; i++) { ro_widths.SetValue(5f, i); } if (countImageRo != 0) { table_ro_image.SetWidths(ro_widths); } table_ro_image.TotalWidth = 570f; foreach (var imageFromRo in viewModel.ImagesFile) { try { roImage = Convert.FromBase64String(Base64.GetBase64File(imageFromRo)); } catch (Exception) { var webClient = new WebClient(); roImage = webClient.DownloadData("https://bateeqstorage.blob.core.windows.net/other/no-image.jpg"); } Image images = Image.GetInstance(imgb: roImage); if (images.Width > 60) { float percentage = 0.0f; percentage = 60 / images.Width; images.ScalePercent(percentage * 100); } PdfPCell imageCell = new PdfPCell(images); imageCell.Border = 0; table_ro_image.AddCell(imageCell); } PdfPCell cell_image = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, }; foreach (var name in viewModel.ImagesName) { cell_image.Phrase = new Phrase(name, normal_font); table_ro_image.AddCell(cell_image); } imageRoHeight = table_ro_image.TotalHeight; table_ro_image.WriteSelectedRows(0, -1, 10, rowYRoImage, cb); } else { imageRoHeight = 0; } #endregion #region Signature PdfPTable table_signature = new PdfPTable(6); table_signature.TotalWidth = 570f; float[] signature_widths = new float[] { 1f, 1f, 1f, 1f, 1f, 1f }; table_signature.SetWidths(signature_widths); PdfPCell cell_signature = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, }; PdfPCell cell_signature_noted = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 2, PaddingTop = 50 }; cell_signature.Phrase = new Phrase("Dibuat", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Kasie Merchandiser", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("R & D", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Ka Produksi", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Mengetahui", normal_font); table_signature.AddCell(cell_signature); cell_signature.Phrase = new Phrase("Menyetujui", normal_font); table_signature.AddCell(cell_signature); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("( )", normal_font); table_signature.AddCell(cell_signature_noted); cell_signature_noted.Phrase = new Phrase("(Michelle Tjokrosaputro)", normal_font); table_signature.AddCell(cell_signature_noted); float table_signatureY = rowYRoImage - imageRoHeight - 10; table_signature.WriteSelectedRows(0, -1, 10, table_signatureY, cb); #endregion this.DrawPrintedOn(now, bf, cb); document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }
public bool GenerateMCDSlipDocument() { storeNumber = GlobalDataAccessor.Instance.CurrentSiteId.StoreNumber; reportNumber = "CL-OP-68"; DataTable checkInfoDetails; string errorCode; string errorText; //Get the report data ShopProcedures.GetStoreManualCheckDepositData(GlobalDataAccessor.Instance.OracleDA, GlobalDataAccessor.Instance.CurrentSiteId.StoreId, ShopDateTime.Instance.ShopDate, out checkInfoDetails, out errorCode, out errorText); if (checkInfoDetails == null || checkInfoDetails.Rows.Count == 0) { FileLogger.Instance.logMessage(LogLevel.ERROR, this, "No data returned from stored procedure for manual check deposit slips " + errorText); return(false); } //Initialize fonts RptFont = FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL); this.HeaderTitleFont = new Font(BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 10); this.MCDSlipReportTitle = @"Check Cash Deposit Slip"; document = new Document(PageSize.LETTER); document.AddTitle(MCDSlipReportTitle); PdfPTable table = new PdfPTable(8); rptFileName = SecurityAccessor.Instance.EncryptConfig.ClientConfig.GlobalConfiguration.BaseLogPath + "\\MCD" + DateTime.Now.ToString("MMddyyyyhhmmssFFFFFFF") + ".pdf"; PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(rptFileName, FileMode.Create)); MCDPageEvents events = new MCDPageEvents(); writer.PageEvent = events; document.SetPageSize(PageSize.LETTER); document.SetMargins(0, 0, 10, 45); Image image = Image.GetInstance(Properties.Resources.logo, BaseColor.WHITE); image.ScalePercent(25); //Insert the report header InsertReportHeader(table, image); document.Open(); document.Add(table); PdfPTable newtable = new PdfPTable(4); //Insert the column headers InsertColumnHeaders(newtable); table.HeaderRows = 7; decimal totalCheckAmount = 0; int totalNumChecks = 0; foreach (DataRow dr in checkInfoDetails.Rows) { string makerName = Common.Libraries.Utility.Utilities.GetStringValue(dr["makername"]); string cdName = Utilities.GetStringValue(dr["username"]); decimal chkAmount = Utilities.GetDecimalValue(dr["checkamount"]); string depositDate = Utilities.GetDateTimeValue(dr["creationdate"]).FormatDate(); totalNumChecks++; totalCheckAmount += chkAmount; PdfPCell pCell = new PdfPCell(); pCell.Colspan = 1; pCell.HorizontalAlignment = Element.ALIGN_JUSTIFIED; pCell.Border = Rectangle.NO_BORDER; pCell.Phrase = new Phrase(makerName, RptFont); newtable.AddCell(pCell); pCell.Phrase = new Phrase(cdName, RptFont); newtable.AddCell(pCell); pCell.Phrase = new Phrase(depositDate, RptFont); newtable.AddCell(pCell); pCell.Phrase = new Phrase(String.Format("{0:n}", chkAmount), RptFont); pCell.HorizontalAlignment = Element.ALIGN_RIGHT; newtable.AddCell(pCell); } //Add a blank line before summary newtable.AddCell(generateBlankLine(8)); //Insert summary table PdfPCell newCell = new PdfPCell(new Paragraph("", RptFont)); newCell.HorizontalAlignment = Element.ALIGN_LEFT; newCell.Border = Rectangle.TOP_BORDER; newCell.Colspan = 4; newtable.AddCell(newCell); newCell.Colspan = 1; newCell.HorizontalAlignment = Element.ALIGN_LEFT; newCell.Border = Rectangle.NO_BORDER; newCell.Phrase = new Phrase("Count of all Checks", RptFont); newtable.AddCell(newCell); newCell.Phrase = new Phrase(totalNumChecks.ToString(), RptFont); newtable.AddCell(newCell); newCell.Phrase = new Phrase("Total Amount of all Checks:", RptFont); newtable.AddCell(newCell); newCell.Phrase = new Phrase(string.Format("{0:n}", totalCheckAmount), RptFont); newCell.HorizontalAlignment = Element.ALIGN_RIGHT; newtable.AddCell(newCell); newCell = new PdfPCell(new Paragraph("", RptFont)); newCell.HorizontalAlignment = Element.ALIGN_LEFT; newCell.Border = Rectangle.BOTTOM_BORDER; newCell.Colspan = 4; newtable.AddCell(newCell); document.Add(newtable); //Insert report footer PdfPTable finalSummaryTable = new PdfPTable(8); finalSummaryTable.TotalWidth = 500f; InsertReportFooter(ref finalSummaryTable); float yAbsolutePosition = newtable.CalculateHeights(true); finalSummaryTable.WriteSelectedRows(0, -1, document.LeftMargin + 30, yAbsolutePosition + 30, writer.DirectContent); document.Close(); //Print and save the document PrintDocument(); return(true); }
internal MemoryStream ComplementarPdf(string path, PecaTecnicaRelatorio pecaTecnica) { Document doc = new Document(PageSize.A4, 85, 40, 73, 50); MemoryStream str = new MemoryStream(); PdfWriter wrt = PdfWriter.GetInstance(doc, str); wrt.SetEncryption(PdfWriter.STRENGTH128BITS, null, null, PdfWriter.AllowPrinting); wrt.PageEvent = CabecalhoRodapeFactory.Criar(pecaTecnica.SetorId); (wrt.PageEvent as IPageMirroring).IsPageMirroring = true; doc.Open(); //------------------------------------------------------ PdfReader reader = new PdfReader(path); PdfContentByte cb; PdfImportedPage page; Rectangle psizeOrg = doc.PageSize; Font arial7Normal = new Font(Font.FontFamily.HELVETICA, 7, Font.NORMAL, BaseColor.BLACK); Font arial5Normal = new Font(Font.FontFamily.HELVETICA, 6, Font.NORMAL, BaseColor.BLACK); float TopMargin = doc.TopMargin; float BottomMargin = doc.BottomMargin; float LeftMargin = doc.LeftMargin; float RightMargin = doc.RightMargin; for (int i = 1; i <= reader.NumberOfPages; i++) { Rectangle paginaMedidas = reader.GetPageSize(i); float px = (psizeOrg.Width - paginaMedidas.Width) / 2; float py = (psizeOrg.Height - paginaMedidas.Height) / 2; if (px < 0 || py < 0) { px = 0; py = 0; } IPageMirroring pageEventMirroring = wrt.PageEvent as IPageMirroring; if (pageEventMirroring != null && pageEventMirroring.IsPageMirroring) { px = px - (doc.LeftMargin - (((i % 2) != 0) ? doc.LeftMargin : doc.RightMargin)); } page = wrt.GetImportedPage(reader, i); Rectangle psize = reader.GetPageSizeWithRotation(i); doc.SetPageSize(psize); doc.NewPage(); cb = wrt.DirectContent; cb.SaveState(); if (psize.Rotation == 0) { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } else if (psize.Rotation == 90) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, psize.Height); } else if (psize.Rotation == 180) { cb.AddTemplate(page, -1f, 0, 0, -1f, psize.Width, psize.Height); } else if (psize.Rotation == 270) { cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, psize.Width, 0); } else { cb.AddTemplate(page, px, py); } cb.RestoreState(); //pegando a primiera pagina if (i <= 2) { //Distancia do Topo float topGrid = 330; float topDadosImovel = topGrid; float topInteressado = topGrid - 23.8f; float topBairro = topGrid - 57f; float topMunicipioUf = topGrid - 77.3f; float topResponsavel = topGrid - 95; float topAssinaturaResponsavel = topGrid - 188; #region Linha Processo PdfPTable linhaProcesso = new PdfPTable(3); linhaProcesso.TotalWidth = doc.PageSize.Width; linhaProcesso.SetWidths(new float[] { 17, 10, 73 }); linhaProcesso.DefaultCell.Padding = 0; linhaProcesso.DefaultCell.SetLeading(0.5f, 0.5f); linhaProcesso.DefaultCell.VerticalAlignment = Rectangle.ALIGN_BOTTOM; linhaProcesso.DefaultCell.HorizontalAlignment = Rectangle.ALIGN_CENTER; linhaProcesso.DefaultCell.Border = Rectangle.NO_BORDER; //BoardEnable(linhaProcesso); linhaProcesso.AddCell(" "); //Margin linhaProcesso.AddCell(new Phrase(pecaTecnica.Protocolo, arial7Normal)); //Processo linhaProcesso.AddCell(" "); //Padding + spacing + padding linhaProcesso.WriteSelectedRows(0, -1, px, topDadosImovel, cb); #endregion #region Interessado PdfPTable linhaInteressados = new PdfPTable(3); linhaInteressados.TotalWidth = doc.PageSize.Width; linhaInteressados.SetWidths(new float[] { 17, 73, 10 }); linhaInteressados.DefaultCell.Padding = 0; linhaInteressados.DefaultCell.Border = Rectangle.NO_BORDER; //linhaInteressados.DefaultCell.SetLeading(0.5f, 0.5f); linhaInteressados.DefaultCell.VerticalAlignment = Rectangle.ALIGN_BOTTOM; linhaProcesso.DefaultCell.Border = Rectangle.NO_BORDER; //BoardEnable(linhaInteressados); linhaInteressados.AddCell(" "); //Margin linhaInteressados.AddCell(new Phrase(string.Join(", ", pecaTecnica.Destinatarios.ToArray()), arial7Normal)); //Interessado Nome linhaInteressados.AddCell(" "); //Padding + spacing + padding linhaInteressados.WriteSelectedRows(0, -1, px, topInteressado, cb); #endregion #region Bairro PdfPTable linhaBairro = new PdfPTable(5); linhaBairro.TotalWidth = doc.PageSize.Width; linhaBairro.SetWidths(new float[] { 17, 35, 2, 35, 11 }); linhaBairro.DefaultCell.Padding = 0; linhaBairro.DefaultCell.VerticalAlignment = Rectangle.ALIGN_MIDDLE; linhaBairro.DefaultCell.Border = Rectangle.NO_BORDER; //BoardEnable(linhaBairro); linhaBairro.AddCell(" "); //Margin linhaBairro.AddCell(new Phrase(pecaTecnica.Bairro, arial7Normal)); linhaBairro.AddCell(" "); //Padding + spacing + padding linhaBairro.AddCell(new Phrase(pecaTecnica.Distrito, arial7Normal)); linhaBairro.AddCell(" "); //Padding + spacing + padding linhaBairro.WriteSelectedRows(0, -1, px, topBairro, cb); #endregion #region Municipio Uf PdfPTable linhaMunicipioEstado = new PdfPTable(3); linhaMunicipioEstado.TotalWidth = doc.PageSize.Width; linhaMunicipioEstado.SetWidths(new float[] { 17, 43, 40 }); linhaMunicipioEstado.DefaultCell.Padding = 0; linhaMunicipioEstado.DefaultCell.VerticalAlignment = Rectangle.ALIGN_MIDDLE; linhaMunicipioEstado.DefaultCell.Border = Rectangle.NO_BORDER; //BoardEnable(linhaMunicipioEstado); linhaMunicipioEstado.AddCell(" "); //Margin linhaMunicipioEstado.AddCell(new Phrase(String.Format("{0} - {1}", pecaTecnica.Municipio, pecaTecnica.Uf), arial7Normal)); //Municipio linhaMunicipioEstado.AddCell(" "); //Padding + spacing + padding linhaMunicipioEstado.WriteSelectedRows(0, -1, px, topMunicipioUf, cb); #endregion #region Linha Assinatura REsponsavel PdfPTable linhaAssinaturaResponsavel = new PdfPTable(3); linhaAssinaturaResponsavel.TotalWidth = doc.PageSize.Width; linhaAssinaturaResponsavel.SetWidths(new float[] { 23, 24, 53 }); //Proporcao 21,0 cm * 10 linhaAssinaturaResponsavel.DefaultCell.Padding = 0; linhaAssinaturaResponsavel.DefaultCell.SetLeading(0.6f, 0.6f); linhaAssinaturaResponsavel.DefaultCell.VerticalAlignment = Rectangle.ALIGN_MIDDLE; linhaAssinaturaResponsavel.DefaultCell.HorizontalAlignment = Rectangle.ALIGN_CENTER; linhaAssinaturaResponsavel.DefaultCell.Border = Rectangle.NO_BORDER; //BoardEnable(linhaAssinaturaResponsavel); linhaAssinaturaResponsavel.AddCell(" "); linhaAssinaturaResponsavel.AddCell(new Phrase(pecaTecnica.Elaborador, arial5Normal)); linhaAssinaturaResponsavel.AddCell(" "); linhaAssinaturaResponsavel.AddCell(" "); linhaAssinaturaResponsavel.AddCell(new Phrase(pecaTecnica.ElaboradorProfissao, arial5Normal)); linhaAssinaturaResponsavel.AddCell(" "); //Padding + spacing + padding linhaAssinaturaResponsavel.AddCell(" "); //Margin linhaAssinaturaResponsavel.AddCell(new Phrase(pecaTecnica.ElaboradorOrgaoClasseRegistro, arial5Normal)); linhaAssinaturaResponsavel.AddCell(" "); //Padding + spacing + padding linhaAssinaturaResponsavel.CalculateHeights(); linhaAssinaturaResponsavel.WriteSelectedRows(0, -1, px, topAssinaturaResponsavel, cb); #endregion } } doc.Close(); return(str); }
/* * (non-Javadoc) * * @see * com.itextpdf.tool.xml.ITagProcessor#endElement(com.itextpdf.tool.xml.Tag, * java.util.List, com.itextpdf.text.Document) */ public override IList <IElement> End(IWorkerContext ctx, Tag tag, IList <IElement> currentContent) { try { bool percentage = false; String widthValue = null; tag.CSS.TryGetValue(HTML.Attribute.WIDTH, out widthValue); if (!tag.CSS.TryGetValue(HTML.Attribute.WIDTH, out widthValue) && !tag.Attributes.TryGetValue(HTML.Attribute.WIDTH, out widthValue)) { widthValue = null; } if (widthValue != null && widthValue.Trim().EndsWith("%")) { percentage = true; } int numberOfColumns = 0; List <TableRowElement> tableRows = new List <TableRowElement>(currentContent.Count); IList <IElement> invalidRowElements = new List <IElement>(1); String repeatHeader; tag.CSS.TryGetValue(CSS.Property.REPEAT_HEADER, out repeatHeader); String repeatFooter; tag.CSS.TryGetValue(CSS.Property.REPEAT_FOOTER, out repeatFooter); int headerRows = 0; int footerRows = 0; foreach (IElement e in currentContent) { int localNumCols = 0; if (e is TableRowElement) { TableRowElement tableRowElement = (TableRowElement)e; foreach (HtmlCell cell in tableRowElement.Content) { localNumCols += cell.Colspan; } if (localNumCols > numberOfColumns) { numberOfColumns = localNumCols; } tableRows.Add(tableRowElement); if (repeatHeader != null && Util.EqualsIgnoreCase(repeatHeader, "yes") && tableRowElement.RowPlace.Equals(TableRowElement.Place.HEADER)) { headerRows++; } if (repeatFooter != null && Util.EqualsIgnoreCase(repeatFooter, "yes") && tableRowElement.RowPlace.Equals(TableRowElement.Place.FOOTER)) { footerRows++; } } else { invalidRowElements.Add(e); } } if (repeatFooter == null || !Util.EqualsIgnoreCase(repeatFooter, "yes")) { InsertionSort <TableRowElement>(tableRows, delegate(TableRowElement o1, TableRowElement o2) { return(o1.RowPlace.Normal.CompareTo(o2.RowPlace.Normal)); }); } else { InsertionSort <TableRowElement>(tableRows, delegate(TableRowElement o1, TableRowElement o2) { return(o1.RowPlace.Repeated.CompareTo(o2.RowPlace.Repeated)); }); } PdfPTable table = new PdfPTable(numberOfColumns); table.HeaderRows = headerRows + footerRows; table.FooterRows = footerRows; TableStyleValues styleValues = SetStyleValues(tag); table.TableEvent = new TableBorderEvent(styleValues); SetVerticalMargin(table, tag, styleValues, ctx); WidenLastCell(tableRows, styleValues.HorBorderSpacing); float[] columnWidths = new float[numberOfColumns]; float[] widestWords = new float[numberOfColumns]; float[] fixedWidths = new float[numberOfColumns]; float[] colspanWidestWords = new float[numberOfColumns]; int[] rowspanValue = new int[numberOfColumns]; float largestColumn = 0; float largestColspanColumn = 0; int indexOfLargestColumn = -1; int indexOfLargestColspanColumn = -1; // Initial fill of the widths arrays foreach (TableRowElement row in tableRows) { int column = 0; foreach (HtmlCell cell in row.Content) { // check whether the current column should be skipped due to a // rowspan value of higher cell in this column. while (rowspanValue[column] > 1) { rowspanValue[column] = rowspanValue[column] - 1; ++column; } // sets a rowspan counter for current column (counter not // needed for last column). if (cell.Rowspan > 1 && column != numberOfColumns - 1) { rowspanValue[column] = cell.Rowspan - 1; } int colspan = cell.Colspan; if (cell.FixedWidth != 0) { float fixedWidth = cell.FixedWidth + GetCellStartWidth(cell); fixedWidth /= colspan; for (int i = 0; i < colspan; i++) { int c = column + i; if (fixedWidth > fixedWidths[c]) { fixedWidths[c] = fixedWidth; columnWidths[c] = fixedWidth; } } } if (cell.CompositeElements != null) { float[] widthValues = SetCellWidthAndWidestWord(cell); float cellWidth = widthValues[0] / colspan; float widestWordOfCell = widthValues[1] / colspan; for (int i = 0; i < colspan; i++) { int c = column + i; if (fixedWidths[c] == 0 && cellWidth > columnWidths[c]) { columnWidths[c] = cellWidth; if (colspan == 1) { if (cellWidth > largestColumn) { largestColumn = cellWidth; indexOfLargestColumn = c; } } else { if (cellWidth > largestColspanColumn) { largestColspanColumn = cellWidth; indexOfLargestColspanColumn = c; } } } if (colspan == 1) { if (widestWordOfCell > widestWords[c]) { widestWords[c] = widestWordOfCell; } } else { if (widestWordOfCell > colspanWidestWords[c]) { colspanWidestWords[c] = widestWordOfCell; } } } } if (colspan > 1) { if (LOG.IsLogging(Level.TRACE)) { LOG.Trace(String.Format(LocaleMessages.GetInstance().GetMessage(LocaleMessages.COLSPAN), colspan)); } column += colspan - 1; } column++; } } if (indexOfLargestColumn == -1) { indexOfLargestColumn = indexOfLargestColspanColumn; if (indexOfLargestColumn == -1) { indexOfLargestColumn = 0; } for (int column = 0; column < numberOfColumns; column++) { widestWords[column] = colspanWidestWords[column]; } } float outerWidth = GetTableOuterWidth(tag, styleValues.HorBorderSpacing, ctx); float initialTotalWidth = GetTableWidth(columnWidths, 0); // float targetWidth = calculateTargetWidth(tag, columnWidths, outerWidth, ctx); float targetWidth = 0; HtmlPipelineContext htmlPipelineContext = GetHtmlPipelineContext(ctx); float max = htmlPipelineContext.PageSize.Width - outerWidth; bool tableWidthFixed = false; if (tag.Attributes.ContainsKey(CSS.Property.WIDTH) || tag.CSS.ContainsKey(CSS.Property.WIDTH)) { targetWidth = new WidthCalculator().GetWidth(tag, htmlPipelineContext.GetRootTags(), htmlPipelineContext.PageSize.Width); if (targetWidth > max) { targetWidth = max; } tableWidthFixed = true; } else if (initialTotalWidth <= max) { targetWidth = initialTotalWidth; } else if (null == tag.Parent || (null != tag.Parent && htmlPipelineContext.GetRootTags().Contains(tag.Parent.Name))) { targetWidth = max; } else /* this table is an inner table and width adjustment is done in outer table */ { targetWidth = GetTableWidth(columnWidths, outerWidth); } float totalFixedColumnWidth = GetTableWidth(fixedWidths, 0); float targetPercentage = 0; if (totalFixedColumnWidth == initialTotalWidth) // all column widths are fixed { targetPercentage = targetWidth / initialTotalWidth; if (initialTotalWidth > targetWidth) { for (int column = 0; column < columnWidths.Length; column++) { columnWidths[column] *= targetPercentage; } } else if (tableWidthFixed && targetPercentage != 1) { for (int column = 0; column < columnWidths.Length; column++) { columnWidths[column] *= targetPercentage; } } } else { targetPercentage = (targetWidth - totalFixedColumnWidth) / (initialTotalWidth - totalFixedColumnWidth); // Reduce width of columns if the columnWidth array + borders + // paddings // is too large for the given targetWidth. if (initialTotalWidth > targetWidth) { float leftToReduce = 0; for (int column = 0; column < columnWidths.Length; column++) { if (fixedWidths[column] == 0) { // Reduce width of the column to its targetWidth, if // widestWord of column still fits in the targetWidth of // the // column. if (widestWords[column] <= columnWidths[column] * targetPercentage) { columnWidths[column] *= targetPercentage; // else take the widest word and calculate space // left to // reduce. } else { columnWidths[column] = widestWords[column]; leftToReduce += widestWords[column] - columnWidths[column] * targetPercentage; } // if widestWord of a column does not fit in the // fixedWidth, // set the column width to the widestWord. } else if (fixedWidths[column] < widestWords[column]) { columnWidths[column] = widestWords[column]; leftToReduce += widestWords[column] - fixedWidths[column]; } } if (leftToReduce != 0) { // Reduce width of the column with the most text, if its // widestWord still fits in the reduced column. if (widestWords[indexOfLargestColumn] <= columnWidths[indexOfLargestColumn] - leftToReduce) { columnWidths[indexOfLargestColumn] -= leftToReduce; } else // set all columns to their minimum, with the // widestWord array. { for (int column = 0; leftToReduce != 0 && column < columnWidths.Length; column++) { if (fixedWidths[column] == 0 && columnWidths[column] > widestWords[column]) { float difference = columnWidths[column] - widestWords[column]; if (difference <= leftToReduce) { leftToReduce -= difference; columnWidths[column] = widestWords[column]; } else { columnWidths[column] -= leftToReduce; leftToReduce = 0; } } } if (leftToReduce != 0) { // If the table has an insufficient fixed width // by // an // attribute or style, try to enlarge the table // to // its // minimum width (= widestWords array). float pageWidth = GetHtmlPipelineContext(ctx).PageSize.Width; if (GetTableWidth(widestWords, outerWidth) < pageWidth) { targetWidth = GetTableWidth(widestWords, outerWidth); leftToReduce = 0; } else { // If all columnWidths are set to the // widestWordWidths and the table is still // to // wide // content will fall off the edge of a page, // which // is similar to HTML. targetWidth = pageWidth - outerWidth; leftToReduce = 0; } } } } // Enlarge width of columns to fit the targetWidth. } else if (initialTotalWidth < targetWidth) { for (int column = 0; column < columnWidths.Length; column++) { if (fixedWidths[column] == 0) { columnWidths[column] *= targetPercentage; } } } } try { table.SetTotalWidth(columnWidths); table.LockedWidth = true; table.DefaultCell.Border = Rectangle.NO_BORDER; } catch (DocumentException e) { throw new RuntimeWorkerException(LocaleMessages.GetInstance().GetMessage(LocaleMessages.NO_CUSTOM_CONTEXT), e); } float?tableHeight = new HeightCalculator().GetHeight(tag, GetHtmlPipelineContext(ctx).PageSize.Height); int rowNumber = 0; foreach (TableRowElement row in tableRows) { int columnNumber = -1; float?computedRowHeight = null; if (tableHeight != null && tableRows.IndexOf(row) == tableRows.Count - 1) { float computedTableHeigt = table.CalculateHeights(); computedRowHeight = tableHeight - computedTableHeigt; } foreach (HtmlCell cell in row.Content) { columnNumber += cell.Colspan; IList <IElement> compositeElements = cell.CompositeElements; if (compositeElements != null) { foreach (IElement baseLevel in compositeElements) { if (baseLevel is PdfPTable) { TableStyleValues cellValues = cell.CellValues; float totalBordersWidth = cellValues.IsLastInRow ? styleValues.HorBorderSpacing * 2 : styleValues.HorBorderSpacing; totalBordersWidth += cellValues.BorderWidthLeft + cellValues.BorderWidthRight; float columnWidth = columnWidths[columnNumber]; IPdfPTableEvent tableEvent = ((PdfPTable)baseLevel).TableEvent; TableStyleValues innerStyleValues = ((TableBorderEvent)tableEvent).TableStyleValues; totalBordersWidth += innerStyleValues.BorderWidthLeft; totalBordersWidth += innerStyleValues.BorderWidthRight; ((PdfPTable)baseLevel).TotalWidth = columnWidth - totalBordersWidth; } } } table.AddCell(cell); } table.CompleteRow(); if (computedRowHeight != null && computedRowHeight > 0) { float rowHeight = table.GetRow(rowNumber).MaxHeights; if (rowHeight < computedRowHeight) { table.GetRow(rowNumber).MaxHeights = computedRowHeight.Value; } } rowNumber++; } if (percentage) { table.WidthPercentage = utils.ParsePxInCmMmPcToPt(widthValue); table.LockedWidth = false; } List <IElement> elems = new List <IElement>(); if (invalidRowElements.Count > 0) { // all invalid row elements taken as caption int i = 0; Tag captionTag = tag.Children[i++]; while (!Util.EqualsIgnoreCase(captionTag.Name, HTML.Tag.CAPTION) && i < tag.Children.Count) { captionTag = tag.Children[i]; i++; } String captionSideValue; captionTag.CSS.TryGetValue(CSS.Property.CAPTION_SIDE, out captionSideValue); if (captionSideValue != null && Util.EqualsIgnoreCase(captionSideValue, CSS.Value.BOTTOM)) { elems.Add(table); elems.AddRange(invalidRowElements); } else { elems.AddRange(invalidRowElements); elems.Add(table); } } else { elems.Add(table); } return(elems); } catch (NoCustomContextException e) { throw new RuntimeWorkerException(LocaleMessages.GetInstance().GetMessage(LocaleMessages.NO_CUSTOM_CONTEXT), e); } }
private void GETpdf(string path) { // try { string con = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + Session["user"].ToString().Substring(0, 2) + "Result" + Year.SelectedValue + ".xls" + ";Extended Properties='Excel 8.0;HDR=Yes;';"; OleDbConnection conn = new OleDbConnection(con); conn.Open(); int sem1 = 0; if (reY.SelectedValue == "1") { sem1 = 1; } else if (reY.SelectedValue == "2") { sem1 = 3; } else if (reY.SelectedValue == "3") { sem1 = 5; } else if (reY.SelectedValue == "4") { sem1 = 7; } OleDbDataAdapter ad = new OleDbDataAdapter("Select * from [" + Session["user"].ToString().Substring(0, 2) + "$] where Sem=" + sem1 + "", conn); DataSet ex = new DataSet(); ad.Fill(ex); DataTable dt1 = ex.Tables[0]; ListBox box = new ListBox(); ListBox pbox = new ListBox(); foreach (DataRow r in dt1.Rows) { box.Items.Add(r["Subject"].ToString()); pbox.Items.Add(r["Pracs"].ToString()); } ad = new OleDbDataAdapter("Select * from [" + Session["user"].ToString().Substring(0, 2) + "$] where Sem=" + (sem1 + 1) + "", conn); ex = new DataSet(); ad.Fill(ex); DataTable d = ex.Tables[0]; ListBox box1 = new ListBox(); ListBox pbox1 = new ListBox(); foreach (DataRow r in d.Rows) { box1.Items.Add(r["Subject"].ToString()); pbox1.Items.Add(r["Pracs"].ToString()); } { OleDbCommand cmd = new OleDbCommand("Select * from [Sheet1$] where std_id='" + students.SelectedValue + "'", conn); OleDbDataReader rd = cmd.ExecuteReader(); if (rd.HasRows) { rd.Read(); Document dt = new Document(PageSize.A4.Rotate(), 10, 10, 20, 10); PdfWriter wr = PdfWriter.GetInstance(dt, new FileStream(path + DateTime.Now.Year + "result.pdf", FileMode.Create)); dt.Open(); //create a 'dt' size 'wr' named pdf file and open it. BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false); //define a font for file. iTextSharp.text.Font subhead = new iTextSharp.text.Font(bfTimes, 10, iTextSharp.text.Font.NORMAL, BaseColor.BLACK); //modifying the font styling iTextSharp.text.Font head = new iTextSharp.text.Font(bfTimes, 18, iTextSharp.text.Font.UNDERLINE, BaseColor.BLACK); iTextSharp.text.Font bsubhead = new iTextSharp.text.Font(bfTimes, 10, iTextSharp.text.Font.BOLD, BaseColor.BLACK); Paragraph p1 = new Paragraph("Uttrakhand Technical University" + Environment.NewLine, head); p1.Alignment = Element.ALIGN_CENTER; p1.SpacingAfter = 10; Paragraph p2 = new Paragraph("Provisonal Marksheet" + Environment.NewLine + "B.TECH Year Specified (Session))" + Environment.NewLine + "Dept of Secfied Branch", subhead); p2.Alignment = Element.ALIGN_CENTER; Paragraph p3 = new Paragraph("Name of Candidate " + rd["Student_name"].ToString().Replace("_", " ") + " Enroll & Roll No." + rd["Roll_No"].ToString().Replace("_", " ") + Environment.NewLine + "Father's Name " + rd["Father_Name"].ToString().Replace("_", " ") + Environment.NewLine + "Name of Institute INSTITUTE OF TECHNOLOGY GOPESHWAR", subhead); PdfPTable part = new PdfPTable(2);//#begining table partition starts part.WidthPercentage = 95; float[] w = { 50f, 50f }; part.AddCell(new Phrase(sem1 + " Semester", subhead)); part.SetWidths(w); part.SpacingBefore = 10; part.SpacingAfter = part.CalculateHeights(); PdfPTable part2 = new PdfPTable(6);//#structure table partition starts part2.WidthPercentage = 95; float[] w2 = { 40f, 30f, 30f, 40f, 30f, 30f }; part2.AddCell(new Phrase("Subject Name", subhead)); part2.AddCell(new Phrase("Maximum Marks", subhead)); part2.AddCell(new Phrase("Marks Obtained", subhead)); part2.AddCell(new Phrase("Subject Name", subhead)); part2.AddCell(new Phrase("Maximum Marks", subhead)); part2.AddCell(new Phrase("Marks Obtained", subhead)); part2.SetWidths(w2); PdfPTable part3 = new PdfPTable(14);//#Defination table partition starts part3.WidthPercentage = 95; float[] w3 = { 40f, 10f, 10f, 10f, 10f, 10f, 10f, 40f, 10f, 10f, 10f, 10f, 10f, 10f }; part3.AddCell(new Phrase(" Theory", bsubhead)); part3.AddCell(new Phrase(" Exam", bsubhead)); part3.AddCell(new Phrase(" Sess.", bsubhead)); part3.AddCell(new Phrase(" Total", bsubhead)); part3.AddCell(new Phrase(" Exam", bsubhead)); part3.AddCell(new Phrase(" Sess", bsubhead)); part3.AddCell(new Phrase(" Total", bsubhead)); part3.AddCell(new Phrase(" Theory", bsubhead)); part3.AddCell(new Phrase(" Exam", bsubhead)); part3.AddCell(new Phrase(" Sess.", bsubhead)); part3.AddCell(new Phrase(" Total", bsubhead)); part3.AddCell(new Phrase(" Exam", bsubhead)); part3.AddCell(new Phrase(" Sess.", bsubhead)); part3.AddCell(new Phrase(" Total", bsubhead)); part3.SetWidths(w3); PdfPTable subs = new PdfPTable(14);//#Subjects table partition starts subs.WidthPercentage = 95; subs.AddCell(new Phrase(box.Items[0].ToString(), subhead)); subs.AddCell(new Phrase(rd["MMsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["SMsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["TMsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["OBsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["SOsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["TOsub1"].ToString(), subhead)); subs.SetWidths(w3); PdfPTable sub2 = new PdfPTable(14);//#Subjects table partition starts sub2.WidthPercentage = 95; sub2.AddCell(new Phrase(box.Items[1].ToString(), subhead)); sub2.AddCell(new Phrase(rd["MMsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["SMsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["TMsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["OBsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["SOsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["TOsub2"].ToString(), subhead)); sub2.SetWidths(w3); PdfPTable sub3 = new PdfPTable(14);//#Subjects table partition starts sub3.WidthPercentage = 95; sub3.AddCell(new Phrase(box.Items[2].ToString(), subhead)); sub3.AddCell(new Phrase(rd["MMsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["SMsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["TMsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["OBsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["SOsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["TOsub3"].ToString(), subhead)); sub3.SetWidths(w3); PdfPTable sub4 = new PdfPTable(14);//#Subjects table partition starts sub4.WidthPercentage = 95; sub4.AddCell(new Phrase(box.Items[3].ToString(), subhead)); sub4.AddCell(new Phrase(rd["MMsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["SMsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["TMsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["OBsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["SOsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["TOsub4"].ToString(), subhead)); sub4.SetWidths(w3); PdfPTable sub5 = new PdfPTable(14);//#Subjects table partition starts sub5.WidthPercentage = 95; sub5.AddCell(new Phrase(box.Items[4].ToString(), subhead)); sub5.AddCell(new Phrase(rd["MMsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["SMsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["TMsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["OBsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["SOsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["TOsub5"].ToString(), subhead)); sub5.SetWidths(w3); PdfPTable sub6 = new PdfPTable(14);//#Subjects table partition starts sub6.WidthPercentage = 95; sub6.AddCell(new Phrase(box.Items[5].ToString(), subhead)); sub6.AddCell(new Phrase(rd["MMsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["SMsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["TMsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["OBsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["SOsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["TOsub6"].ToString(), subhead)); sub6.SetWidths(w3); PdfPTable part4 = new PdfPTable(14);//#PRACS table partition starts part4.WidthPercentage = 95; part4.AddCell(new Phrase(" PRACTICAL", bsubhead)); part4.AddCell(new Phrase(" EXT", bsubhead)); part4.AddCell(new Phrase(" INTR", bsubhead)); part4.AddCell(new Phrase(" Total", bsubhead)); part4.AddCell(new Phrase(" EXT", bsubhead)); part4.AddCell(new Phrase(" INTR", bsubhead)); part4.AddCell(new Phrase(" Total", bsubhead)); part4.AddCell(new Phrase(" PRACTICAL", bsubhead)); part4.AddCell(new Phrase(" EXT", bsubhead)); part4.AddCell(new Phrase(" INTR", bsubhead)); part4.AddCell(new Phrase(" Total", bsubhead)); part4.AddCell(new Phrase(" EXT", bsubhead)); part4.AddCell(new Phrase(" INTR", bsubhead)); part4.AddCell(new Phrase(" Total", bsubhead)); part4.SetWidths(w3); PdfPTable pracs = new PdfPTable(14);//#Prac_def table partition starts pracs.WidthPercentage = 95; pracs.AddCell(new Phrase(pbox.Items[0].ToString(), subhead)); pracs.AddCell(new Phrase(rd["PRMsub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["PRMisub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["TPRsub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["Oprsub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["Oprisub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["OTsub1"].ToString(), subhead)); pracs.SetWidths(w3); PdfPTable prac2 = new PdfPTable(14);//#Prac_def table partition starts prac2.WidthPercentage = 95; prac2.AddCell(new Phrase(pbox.Items[1].ToString(), subhead)); prac2.AddCell(new Phrase(rd["PRMsub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["PRMisub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["TPRsub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["Oprsub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["Oprisub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["OTsub2"].ToString(), subhead)); prac2.SetWidths(w3); PdfPTable prac3 = new PdfPTable(14);//#Prac_def table partition starts prac3.WidthPercentage = 95; prac3.AddCell(new Phrase(pbox.Items[2].ToString(), subhead)); prac3.AddCell(new Phrase(rd["PRMsub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["PRMisub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["TPRsub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["Oprsub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["Oprisub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["OTsub3"].ToString(), subhead)); prac3.SetWidths(w3); PdfPTable prac4 = new PdfPTable(14);//#Prac_def table partition starts prac4.WidthPercentage = 95; prac4.AddCell(new Phrase(pbox.Items[3].ToString(), subhead)); prac4.AddCell(new Phrase(rd["PRMsub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["PRMisub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["TPRsub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["Oprsub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["Oprisub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["OTsub4"].ToString(), subhead)); prac4.SetWidths(w3); PdfPTable bottom = new PdfPTable(4);//#Prac_def table partition starts float[] w4 = { 25f, 12.5f, 50f, 12.5f }; bottom.WidthPercentage = 75; bottom.AddCell(new Phrase("Carry Over (if any)", subhead)); PdfPTable bot1 = new PdfPTable(2);//#Prac_def table partition starts float[] ww = { 50f, 50f }; bot1.AddCell(new Phrase("Total No.", subhead)); bot1.AddCell(new Phrase("Subject Code.", subhead)); bot1.AddCell(new Phrase(rd["Carry"].ToString(), subhead)); bot1.AddCell(new Phrase(rd["c_code"].ToString(), subhead)); bot1.SetWidths(ww); PdfPCell c = new PdfPCell(bot1); bottom.AddCell(new Phrase("Grace Marks (if any)", subhead)); bottom.AddCell(new Phrase("Marks Obtained /Maximum Marks", subhead)); bottom.AddCell(new Phrase("Result", subhead)); bottom.AddCell(c); bottom.AddCell(new Phrase(rd["grace"].ToString(), subhead)); bottom.SpacingBefore = 20; PdfPTable bot2 = new PdfPTable(3);//#Prac_def table partition starts float[] ww2 = { .33f, .33f, .33f }; bot2.AddCell(new Phrase(sem1 + " Semester", subhead)); bot2.AddCell(new Phrase((sem1 + 1) + " Semester", subhead)); bot2.AddCell(new Phrase("Grand Total", bsubhead)); bot2.AddCell(new Phrase(rd["Gtotal"].ToString() + "/" + rd["GMMtotal"].ToString(), subhead)); bot2.SetWidths(ww2); int val = Convert.ToInt32(rd["Gtotal"]); int val2 = Convert.ToInt32(rd["GMMtotal"]); bot2.AddCell(new Phrase(rd["Gtotal"].ToString() + "/" + rd["GMMtotal"].ToString(), subhead)); bot2.AddCell(new Phrase((val + Convert.ToInt32(rd["Gtotal"])) / 2 + "/" + (val2 + Convert.ToInt32(rd["GMMtotal"])) / 2, subhead)); PdfPCell c2 = new PdfPCell(bot2); bottom.AddCell(c2); bottom.AddCell(new Phrase("Passed", bsubhead)); bottom.SetWidths(w4); pracs.WidthPercentage = 95; pracs.AddCell(new Phrase(pbox1.Items[0].ToString(), subhead)); pracs.AddCell(new Phrase(rd["PRMsub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["PRMisub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["TPRsub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["Oprsub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["Oprisub1"].ToString(), subhead)); pracs.AddCell(new Phrase(rd["OTsub1"].ToString(), subhead)); prac2.AddCell(new Phrase(pbox1.Items[1].ToString(), subhead)); prac2.AddCell(new Phrase(rd["PRMsub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["PRMisub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["TPRsub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["Oprsub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["Oprisub2"].ToString(), subhead)); prac2.AddCell(new Phrase(rd["OTsub2"].ToString(), subhead)); prac3.AddCell(new Phrase(pbox1.Items[2].ToString(), subhead)); prac3.AddCell(new Phrase(rd["PRMsub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["PRMisub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["TPRsub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["Oprsub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["Oprisub3"].ToString(), subhead)); prac3.AddCell(new Phrase(rd["OTsub3"].ToString(), subhead)); prac4.AddCell(new Phrase(pbox1.Items[3].ToString(), subhead)); prac4.AddCell(new Phrase(rd["PRMsub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["PRMisub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["TPRsub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["Oprsub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["Oprisub4"].ToString(), subhead)); prac4.AddCell(new Phrase(rd["OTsub4"].ToString(), subhead)); part.AddCell(new Phrase((sem1 + 1) + " semester", subhead)); subs.AddCell(new Phrase(box1.Items[0].ToString(), subhead)); subs.AddCell(new Phrase(rd["MMsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["SMsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["TMsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["OBsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["SOsub1"].ToString(), subhead)); subs.AddCell(new Phrase(rd["TOsub1"].ToString(), subhead)); sub2.AddCell(new Phrase(box1.Items[1].ToString(), subhead)); sub2.AddCell(new Phrase(rd["MMsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["SMsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["TMsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["OBsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["SOsub2"].ToString(), subhead)); sub2.AddCell(new Phrase(rd["TOsub2"].ToString(), subhead)); sub3.AddCell(new Phrase(box1.Items[2].ToString(), subhead)); sub3.AddCell(new Phrase(rd["MMsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["SMsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["TMsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["OBsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["SOsub3"].ToString(), subhead)); sub3.AddCell(new Phrase(rd["TOsub3"].ToString(), subhead)); sub4.AddCell(new Phrase(box1.Items[3].ToString(), subhead)); sub4.AddCell(new Phrase(rd["MMsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["SMsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["TMsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["OBsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["SOsub4"].ToString(), subhead)); sub4.AddCell(new Phrase(rd["TOsub4"].ToString(), subhead)); sub5.AddCell(new Phrase(box1.Items[4].ToString(), subhead)); sub5.AddCell(new Phrase(rd["MMsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["SMsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["TMsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["OBsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["SOsub5"].ToString(), subhead)); sub5.AddCell(new Phrase(rd["TOsub5"].ToString(), subhead)); sub6.AddCell(new Phrase(box1.Items[5].ToString(), subhead)); sub6.AddCell(new Phrase(rd["MMsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["SMsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["TMsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["OBsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["SOsub6"].ToString(), subhead)); sub6.AddCell(new Phrase(rd["TOsub6"].ToString(), subhead)); dt.Add(p1); dt.Add(p2); dt.Add(p3); dt.Add(part); dt.Add(part2); dt.Add(part3); dt.Add(subs); dt.Add(sub2); dt.Add(sub3); dt.Add(sub4); dt.Add(sub5); dt.Add(sub6); dt.Add(part4); dt.Add(pracs); dt.Add(prac2); dt.Add(prac3); dt.Add(prac4); dt.Add(bottom); rd.Close(); dt.Close(); Response.Redirect(Session["user"].ToString() + "\\" + "Result\\" + DateTime.Now.Year + "result.pdf"); } else { ScriptManager.RegisterStartupScript(Page, this.GetType(), "Key", string.Format("alert('{0}'); ", "unable GetResult File Missing or No data Present" + Environment.NewLine + "Error code 12420" + Environment.NewLine), true);// + ex.ToString()); } } } //catch (Exception ex) //{ // ScriptManager.RegisterStartupScript(Page, this.GetType(), "Key", string.Format("alert('{0}'); ", ex), true);// + ex.ToString()); //} }