private static void ReportBuilder(SqlDataReader dr, int cropYear, string logoUrl, System.IO.FileStream fs) { const string METHOD_NAME = "rptFieldContracting.ReportBuilder: "; string rptTitle = ""; StringBuilder sb = new StringBuilder(); Document document = null; PdfWriter writer = null; PdfPTable table = null; ContractingReportEvent pgEvent = null; iTextSharp.text.Image imgLogo = null; Font titleFont = FontFactory.GetFont("HELVETICA", 12F, Font.BOLD); Font subTitleFont = FontFactory.GetFont("HELVETICA", 9F, Font.NORMAL); Font headerFont = FontFactory.GetFont("HELVETICA", 8F, Font.NORMAL); Font normalFont = FontFactory.GetFont("HELVETICA", 8F, Font.NORMAL); Font labelFont = FontFactory.GetFont("HELVETICA", 8F, Font.BOLD); try { while (dr.Read()) { try { if (document == null) { // IF YOU CHANGE MARGINS, CHANGE YOUR TABLE LAYOUTS !!! // *** US LETTER: 612 X 792 *** //document = new Document(iTextSharp.text.PageSize.LETTER, 36, 36, 54, 72); document = new Document(PortraitPageSize.PgPageSize, PortraitPageSize.PgLeftMargin, PortraitPageSize.PgRightMargin, PortraitPageSize.PgTopMargin, PortraitPageSize.PgBottomMargin); // we create a writer that listens to the document // and directs a PDF-stream to a file writer = PdfWriter.GetInstance(document, fs); imgLogo = PdfReports.GetImage(logoUrl, 127, 50, iTextSharp.text.Element.ALIGN_CENTER); rptTitle = cropYear.ToString() + " Shareholder Contracting\nJanuary 15th through March 30th"; // Attach my override event handler(s) pgEvent = new ContractingReportEvent(); pgEvent.FillEvent(DateTime.Now.ToShortDateString(), 0, rptTitle, imgLogo); writer.PageEvent = pgEvent; // Open the document document.Open(); } // ====================================================== // Generate a new page. // ====================================================== if (table != null) { pgEvent.FillEvent(DateTime.Now.ToShortDateString(), 0, rptTitle, imgLogo); document.NewPage(); } // ====================================================== // Shareholder Block // ====================================================== string cntNo = "Contract #: " + dr.GetString(dr.GetOrdinal("cntg_contract_no")); float[] addrLayout = new float[] { 270F, 270F }; table = PdfReports.CreateTable(addrLayout, 0); PdfReports.AddText2Table(table, "\nSHID: " + dr.GetString(dr.GetOrdinal("cntg_shid")), normalFont, "left"); PdfReports.AddText2Table(table, cntNo, normalFont, "right"); Paragraph p = PdfReports.GetAddressBlock(dr.GetString(dr.GetOrdinal("cntg_business_name")), dr.GetString(dr.GetOrdinal("cntg_address1")), dr.GetString(dr.GetOrdinal("cntg_address2")), dr.GetString(dr.GetOrdinal("cntg_city")) + ", " + dr.GetString(dr.GetOrdinal("cntg_state")) + " " + dr.GetString(dr.GetOrdinal("cntg_zip")), 0F, 15F, iTextSharp.text.Element.ALIGN_LEFT, normalFont); PdfReports.AddText2Table(table, p); string landOwner = "Land Owner: " + dr.GetString(dr.GetOrdinal("cntg_landowner_name")); PdfReports.AddText2Table(table, landOwner, normalFont, "right"); // Add a blank line. PdfReports.AddText2Table(table, " ", normalFont, "center", addrLayout.Length); PdfReports.AddTableNoSplit(document, pgEvent, table); // ====================================================== // Legal Land Description // ====================================================== // *** ROW 1 *** float[] tmpLayout = new float[] { 13F, 13.5F, 11F, 13.5F, 11F, 13.5F, 11F, 13.5F }; table = PdfReports.CreateTable(tmpLayout, 0); PdfReports.AddText2Table(table, "Field Name: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_field_name")), normalFont); PdfReports.AddText2Table(table, "Acres: ", labelFont); PdfReports.AddText2Table(table, dr.GetInt32(dr.GetOrdinal("cntg_acres")).ToString(), normalFont); PdfReports.AddText2Table(table, "State: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_lld_state")), normalFont); PdfReports.AddText2Table(table, "County: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_lld_county")), normalFont); // *** ROW 2 *** PdfReports.AddText2Table(table, "1/4 Quadrant: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_lld_quarter_quadrant")), normalFont); PdfReports.AddText2Table(table, "Quadrant: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_lld_quadrant")), normalFont); PdfReports.AddText2Table(table, "Section: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_lld_section")), normalFont); PdfReports.AddText2Table(table, "Township: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_lld_township")), normalFont); // *** ROW 3 *** PdfReports.AddText2Table(table, "Range: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_lld_range")), normalFont); PdfReports.AddText2Table(table, "Latitude: ", labelFont); PdfReports.AddText2Table(table, dr.GetDecimal(dr.GetOrdinal("cntg_latitude")).ToString(), normalFont); PdfReports.AddText2Table(table, "Longitude: ", labelFont); PdfReports.AddText2Table(table, dr.GetDecimal(dr.GetOrdinal("cntg_longitude")).ToString(), normalFont); PdfReports.AddText2Table(table, "FSA Official: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_fsa_official")), normalFont); // *** ROW 4 *** PdfReports.AddText2Table(table, "FSA Number: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_fsa_number")), normalFont, 3); PdfReports.AddText2Table(table, "FSA State: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_fsa_state")), normalFont); PdfReports.AddText2Table(table, "FSA County: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_fsa_county")), normalFont); // *** ROW 5 *** PdfReports.AddText2Table(table, "Farm No: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_farm_number")), normalFont); PdfReports.AddText2Table(table, "Tract No: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_tract_number")), normalFont); PdfReports.AddText2Table(table, "Field No: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_field_number")), normalFont); PdfReports.AddText2Table(table, "1/4 Field: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_quarter_field")), normalFont, 7); // *** ROW 6 *** PdfReports.AddText2Table(table, "Description", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_description")), normalFont, 7); PdfReports.AddText2Table(table, " ", normalFont, tmpLayout.Length); PdfReports.AddTableNoSplit(document, pgEvent, table); // ====================================================== // Field Contracting // ====================================================== float[] fcLayout = new float[] { 120.0F, 150.0F, 100.0F, 170.0F }; table = PdfReports.CreateTable(fcLayout, 1); table.DefaultCell.PaddingTop = 3.0F; table.DefaultCell.PaddingBottom = 0; table.DefaultCell.PaddingLeft = 0; table.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT; table.DefaultCell.VerticalAlignment = Element.ALIGN_BOTTOM; // Row 1 PdfReports.AddText2Table(table, "Land Ownership: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_ownership")).ToString(), normalFont); PdfReports.AddText2Table(table, " ", normalFont, 2); // Row 2 PdfReports.AddText2Table(table, "Rotation Length (years): ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_rotation_len")).ToString(), normalFont); PdfReports.AddText2Table(table, "Prior Crop: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_prev_crop_type")).ToString(), normalFont); // Row 3 PdfReports.AddText2Table(table, "Years field has had beets: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_beet_years")).ToString(), normalFont); PdfReports.AddText2Table(table, "Tillage: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_tillage")).ToString(), normalFont); // blank PdfReports.AddText2Table(table, " ", normalFont, fcLayout.Length); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Pre-Harvest", labelFont, "center"); PdfReports.AddText2Table(table, "Post-Harvest", labelFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Rhizomania Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_rhizomania")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_rhizomania")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Aphanomyces Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_aphanomyces")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_aphanomyces")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Curly Top Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_curly_top")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_curlytop")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Fusarium Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_fusarium")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_fusarium")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Rhizoctonia Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_rhizoctonia")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_rhizoctonia")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Nematode Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_nematode")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_nematode")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Cercospora Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_cercospora")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_cercospora")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Root Aphid Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_root_aphid")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_rootaphid")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, "Powdery Mildew Suspect: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_suspect_powdery_mildew")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_powderymildew")).ToString(), normalFont, "center"); PdfReports.AddText2Table(table, " ", normalFont); PdfReports.AddText2Table(table, " ", normalFont, 4); PdfReports.AddTableNoSplit(document, pgEvent, table); float[] lld2Layout = new float[] { 67.5F, 67.5F, 55F, 80F, 67.5F, 67.5F, 67.5F, 67.5F }; table = PdfReports.CreateTable(lld2Layout, 1); PdfReports.AddText2Table(table, "Irrigation System: ", labelFont, 2); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_irrigation_method")).ToString(), normalFont, "left", 2); PdfReports.AddText2Table(table, " ", labelFont, 4); PdfReports.AddText2Table(table, "Water Source: ", labelFont, 2); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_irrigation_source")).ToString(), normalFont, "left", 2); PdfReports.AddText2Table(table, "Water: ", labelFont); PdfReports.AddText2Table(table, dr.GetString(dr.GetOrdinal("cntg_post_water")).ToString(), normalFont, "left"); PdfReports.AddText2Table(table, " ", labelFont, 2); PdfReports.AddTableNoSplit(document, pgEvent, table); } catch (System.Exception ex) { WSCIEMP.Common.CException wscEx = new WSCIEMP.Common.CException(METHOD_NAME, ex); throw (wscEx); } } // ====================================================== // Close document // ====================================================== if (document != null) { pgEvent.IsDocumentClosing = true; document.Close(); document = null; } if (writer == null) { // Warn that we have no data. WSCIEMP.Common.CWarning warn = new WSCIEMP.Common.CWarning("No records matched your report criteria."); throw (warn); } } catch (Exception ex) { string errMsg = "sb is null: " + (sb == null).ToString() + "; " + "document is null: " + (document == null).ToString() + "; " + "writer is null: " + (writer == null).ToString(); WSCIEMP.Common.CException wscex = new WSCIEMP.Common.CException(METHOD_NAME + errMsg, ex); throw (wscex); } finally { if (document != null) { pgEvent.IsDocumentClosing = true; document.Close(); } if (writer != null) { writer.Close(); } } }