public static void BorderBottomRow(PdfPRow row) { foreach (var cell in row.GetCells()) { cell.BorderBottom(); } }
public static void FixMainRowsPadding(PdfPTable mainTable) { for (int i = 0; i < mainTable.Rows.Count; i++) { PdfPRow contentRow = mainTable.Rows[i]; foreach (PdfPCell cell in contentRow.GetCells()) { cell.Padding = 0; cell.Top = 100; if (cell.CompositeElements == null) { continue; } IElement elem = cell.CompositeElements.Where(c => c.Type == 23).FirstOrDefault(); if (elem != null && elem is PdfPTable) { PdfPTable t = elem as PdfPTable; if (t != null) { foreach (PdfPRow tr in t.Rows) { foreach (PdfPCell trc in tr.GetCells()) { trc.Padding = 0; } } } } } } }
/// <summary> /// Imports a PdfPRow and copies all settings /// @since 2.1.3 /// </summary> /// <param name="row">The PdfPRow to import</param> private void importRow(PdfPRow row) { _cells = new ArrayList(); _width = Document.GetDocumentHeader().GetPageSetting().GetPageWidth() - Document.GetDocumentHeader().GetPageSetting().GetMarginLeft() - Document.GetDocumentHeader().GetPageSetting().GetMarginRight(); _width = (int)(_width * _parentTable.GetTableWidthPercent() / 100); var cellRight = 0; var cellWidth = 0; var cells = row.GetCells(); for (var i = 0; i < cells.Length; i++) { cellWidth = (int)(_width * _parentTable.GetProportionalWidths()[i] / 100); cellRight = cellRight + cellWidth; var cell = cells[i]; var rtfCell = new RtfCell(Document, this, cell); rtfCell.SetCellRight(cellRight); rtfCell.SetCellWidth(cellWidth); _cells.Add(rtfCell); } }
/** * Imports a PdfPRow and copies all settings * * @param row The PdfPRow to import * @since 2.1.3 */ private void ImportRow(PdfPRow row) { this.cells = new ArrayList(); this.width = this.document.GetDocumentHeader().GetPageSetting().GetPageWidth() - this.document.GetDocumentHeader().GetPageSetting().GetMarginLeft() - this.document.GetDocumentHeader().GetPageSetting().GetMarginRight(); this.width = (int)(this.width * this.parentTable.GetTableWidthPercent() / 100); int cellRight = 0; int cellWidth = 0; PdfPCell[] cells = row.GetCells(); for (int i = 0; i < cells.Length; i++) { cellWidth = (int)(this.width * this.parentTable.GetProportionalWidths()[i] / 100); cellRight = cellRight + cellWidth; PdfPCell cell = cells[i]; RtfCell rtfCell = new RtfCell(this.document, this, cell); rtfCell.SetCellRight(cellRight); rtfCell.SetCellWidth(cellWidth); this.cells.Add(rtfCell); } }
public static PdfPCell[] AddEmptyRowToTable(PdfPTable table, bool isBorderShown, bool isWithPadding, bool isAlighCenter) { PdfPCell[] rowCells = new PdfPCell[table.NumberOfColumns]; for (int i = 0; i < rowCells.Length; i++) { rowCells[i] = new PdfPCell(); if (!isBorderShown) { rowCells[i].Border = 0; } if (!isWithPadding) { rowCells[i].Padding = 0f; } if (isAlighCenter) { rowCells[i].HorizontalAlignment = Element.ALIGN_CENTER; } } PdfPRow addedRow = new PdfPRow(rowCells); table.Rows.Add(addedRow); return(addedRow.GetCells()); }
public void GenerarFactura(string id) { var existepuntorecogida = false; var clavevalor = new Dictionary <string, string>(); contexto.clavevalor.ToList().ForEach(x => clavevalor.Add(x.clave, x.valor)); var datosreserva = contexto.reservaexcursionactividad.Where(x => x.reserva.codigoqr == id).Select(x => new { exact_id = x.calendarioexcursion.exact_id, fechatransaccion = x.reserva.fechatransaccion, fecha = x.calendarioexcursion.fecha, duracion = x.calendarioexcursion.excursionactividad.duracion, tipo_duracion = x.calendarioexcursion.excursionactividad.tipoduracion, actividad = x.calendarioexcursion.excursionactividad.configuracion.nombre, preciogrupo = x.calendarioexcursion.excursionactividad.precioporgrupo, numadultos = x.numadultos, numninos = x.numninos, numinfantes = x.numinfantes, numjuniors = x.numjuniors, numseniors = x.numseniors, direccion = x.calendarioexcursion.excursionactividad.configuracion.direccion, lat = x.calendarioexcursion.excursionactividad.configuracion.lat, lng = x.calendarioexcursion.excursionactividad.configuracion.lng, localidad = x.calendarioexcursion.excursionactividad.configuracion.localidad.nombre, codigopostal = x.calendarioexcursion.excursionactividad.configuracion.localidad.cp, provincia = x.calendarioexcursion.excursionactividad.configuracion.localidad.provincia.nombre, pais = x.calendarioexcursion.excursionactividad.configuracion.localidad.provincia.pais.nombre, descuento = x.calendarioexcursion.excursionactividad.descuento == null ? 0 : x.calendarioexcursion.excursionactividad.descuento, punto = x.punto, telefono = x.reserva.proveedor.usuario.PhoneNumber, nombre = x.reserva.cliente.usuario.nombre, primerapellido = x.reserva.cliente.usuario.primerapellido, segundoapellido = x.reserva.cliente.usuario.segundoapellido, idfactura = x.reserva.id }).FirstOrDefault(); dynamic precios; if (datosreserva.preciogrupo) { precios = contexto.preciotemporada.Where(c => (c.desde <= datosreserva.fechatransaccion && datosreserva.fechatransaccion <= c.hasta) && c.exact_id == datosreserva.exact_id).Select(x => new { preciogrupo = x.pvpgrupo }).FirstOrDefault(); } else { precios = contexto.preciotemporada.Where(c => (c.desde <= datosreserva.fechatransaccion && datosreserva.fechatransaccion <= c.hasta) && c.exact_id == datosreserva.exact_id).Select(x => new { precioadulto = x.pvpadulto, precionino = x.pvpnino, precioinfante = x.pvpinfante, preciojunior = x.pvpjunior, preciosenior = x.pvpsenior, totaladulto = datosreserva.numadultos * x.pvpadulto, totaljunior = datosreserva.numjuniors * x.pvpjunior, totalsenior = datosreserva.numseniors * x.pvpsenior, totalnino = datosreserva.numninos * x.pvpnino, totalinfante = datosreserva.numinfantes * x.pvpinfante }).FirstOrDefault(); } var facturaitems = contexto.facturaitem_exact.Where(x => x.exact_id == datosreserva.exact_id).Select(x => x.item).ToList(); if (datosreserva.punto != null) { existepuntorecogida = true; } string filePath = HostingEnvironment.MapPath("~/facturas/" + id + ".pdf"); Document doc = new Document(PageSize.A4); PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(filePath, FileMode.Create)); doc.Open(); iTextSharp.text.Font fuente = new iTextSharp.text.Font(iTextSharp.text.Font.TIMES_ROMAN, 12, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK); iTextSharp.text.Font bold = new iTextSharp.text.Font(iTextSharp.text.Font.TIMES_ROMAN, 12, iTextSharp.text.Font.BOLD, iTextSharp.text.Color.BLACK); iTextSharp.text.Font pequeña = new iTextSharp.text.Font(iTextSharp.text.Font.TIMES_ROMAN, 7, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK); iTextSharp.text.Image logocabecera = iTextSharp.text.Image.GetInstance(HostingEnvironment.MapPath("~/recursos/imagenes/logo_empresa.png")); logocabecera.ScalePercent(15); PdfContentByte cb = writer.DirectContent; cb.SetColorStroke(iTextSharp.text.Color.BLACK); cb.MoveTo(38, 720); cb.SetLineWidth(0.5f); cb.LineTo(doc.PageSize.Width - 38, 720); cb.Stroke(); #region tabla_empresa PdfPTable tabla_cabecera_datos_empresa = new PdfPTable(1); PdfPCell celda_tabla_cabecera_datos_empresa_nombre = new PdfPCell(new Phrase("EcoTurismo Adventures S.L", fuente)); PdfPCell celda_tabla_cabecera_datos_empresa_cif = new PdfPCell(new Phrase("B569854122", fuente)); PdfPCell celda_tabla_cabecera_datos_empresa_telefono = new PdfPCell(new Phrase("(+34) 922 68 32 44", fuente)); PdfPCell celda_tabla_cabecera_datos_empresa_email = new PdfPCell(new Phrase("*****@*****.**", fuente)); PdfPCell celda_tabla_cabecera_datos_empresa_direccion = new PdfPCell(new Phrase(@"C:\Avenida Bélgica 32006 (Adeje) Santa Cruz de Tenerife, España", fuente)); tabla_cabecera_datos_empresa.AddCell(celda_tabla_cabecera_datos_empresa_nombre); tabla_cabecera_datos_empresa.AddCell(celda_tabla_cabecera_datos_empresa_cif); tabla_cabecera_datos_empresa.AddCell(celda_tabla_cabecera_datos_empresa_telefono); tabla_cabecera_datos_empresa.AddCell(celda_tabla_cabecera_datos_empresa_email); tabla_cabecera_datos_empresa.AddCell(celda_tabla_cabecera_datos_empresa_direccion); PdfPCell celda = null; foreach (PdfPRow row in tabla_cabecera_datos_empresa.GetRows(0, tabla_cabecera_datos_empresa.Rows.Count)) { foreach (PdfPCell cell in row.GetCells()) { celda = new PdfPCell(cell.Phrase); celda.HorizontalAlignment = PdfCell.ALIGN_RIGHT; celda.Border = 0; tabla_cabecera_datos_empresa.DeleteRow(0); tabla_cabecera_datos_empresa.AddCell(celda); } } #endregion #region tabla_cabecera PdfPTable tabla_cabecera = new PdfPTable(2); tabla_cabecera.WidthPercentage = 100; tabla_cabecera.SetWidths(new float[] { 20, 80 }); PdfPCell celda_cabecera_logo = new PdfPCell(logocabecera); celda_cabecera_logo.Border = 0; PdfPCell celda_cabecera_datosempresa = new PdfPCell(tabla_cabecera_datos_empresa); celda_cabecera_datosempresa.Border = 0; tabla_cabecera.AddCell(celda_cabecera_logo); tabla_cabecera.AddCell(celda_cabecera_datosempresa); doc.Add(tabla_cabecera); #endregion #region tabla_precios PdfPTable tabla_precios = new PdfPTable(2); tabla_precios.WidthPercentage = 100; tabla_precios.SetWidths(new float[] { 40, 60 }); Dictionary <string, string> preciosdic = new Dictionary <string, string>(); preciosdic.Add(Mensajes.mensaje15, datosreserva.actividad); preciosdic.Add(Mensajes.mensaje16, datosreserva.fecha.ToString("dd-MM-yyyy HH:mm:ss")); if (datosreserva.tipo_duracion.Equals("flexible")) { preciosdic.Add(Mensajes.mensaje17, Mensajes.mensaje18); } else { var tiempo = ""; switch (datosreserva.tipo_duracion) { case "hora": tiempo = Mensajes.mensaje19; break; case "minuto": tiempo = Mensajes.mensaje20; break; case "dia": tiempo = Mensajes.mensaje21; break; } preciosdic.Add(Mensajes.mensaje17, datosreserva.duracion.ToString() + " " + tiempo); } preciosdic.Add(Mensajes.mensaje22, datosreserva.numadultos.ToString()); preciosdic.Add(Mensajes.mensaje23, datosreserva.numjuniors.ToString()); preciosdic.Add(Mensajes.mensaje24, datosreserva.numseniors.ToString()); preciosdic.Add(Mensajes.mensaje25, datosreserva.numninos.ToString()); preciosdic.Add(Mensajes.mensaje26, datosreserva.numinfantes.ToString()); if (datosreserva.preciogrupo) { preciosdic.Add(Mensajes.mensaje40, precios.preciogrupo.ToString()); } else { preciosdic.Add(Mensajes.mensaje27, precios.precioadulto.ToString()); preciosdic.Add(Mensajes.mensaje28, precios.preciojunior.ToString()); preciosdic.Add(Mensajes.mensaje29, precios.preciosenior.ToString()); preciosdic.Add(Mensajes.mensaje30, precios.precionino.ToString()); preciosdic.Add(Mensajes.mensaje31, precios.precioinfante.ToString()); preciosdic.Add(Mensajes.mensaje32, precios.totaladulto.ToString()); preciosdic.Add(Mensajes.mensaje33, precios.totaljunior.ToString()); preciosdic.Add(Mensajes.mensaje34, precios.totalsenior.ToString()); preciosdic.Add(Mensajes.mensaje35, precios.totalnino.ToString()); preciosdic.Add(Mensajes.mensaje36, precios.totalinfante.ToString()); } PdfPCell cel1 = null; foreach (KeyValuePair <string, string> val in preciosdic) { cel1 = new PdfPCell(new Phrase(val.Key, bold)); cel1.Border = 0; cel1.HorizontalAlignment = PdfCell.ALIGN_LEFT; tabla_precios.AddCell(cel1); cel1 = new PdfPCell(new Phrase(val.Value, fuente)); cel1.Border = 0; cel1.HorizontalAlignment = PdfCell.ALIGN_LEFT; tabla_precios.AddCell(cel1); } #endregion #region tabla_wraper1 PdfPTable tabla_wraper1 = new PdfPTable(2); tabla_wraper1.WidthPercentage = 100; tabla_wraper1.SetWidths(new float[] { 70, 30 }); tabla_wraper1.SpacingBefore = 40f; tabla_wraper1.HorizontalAlignment = 0; PdfPCell cel2 = new PdfPCell(new Phrase(Mensajes.menaje37 + " " + datosreserva.nombre + " " + datosreserva.primerapellido + " " + datosreserva.segundoapellido, bold)); cel2.Colspan = 2; cel2.PaddingBottom = 5; tabla_wraper1.AddCell(cel2); tabla_wraper1.AddCell(tabla_precios); var qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); var qrCode = qrEncoder.Encode(id); var renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Four), Brushes.Black, Brushes.White); MemoryStream stream = new MemoryStream(); renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream); stream.Position = 0; iTextSharp.text.Image output = iTextSharp.text.Image.GetInstance(stream); stream.Close(); tabla_wraper1.AddCell(output); doc.Add(tabla_wraper1); #endregion #region tabla_precio_total PdfPTable tabla_precio_total = new PdfPTable(2); tabla_precio_total.SetWidths(new float[] { 80, 20 }); tabla_precio_total.WidthPercentage = 100; tabla_precio_total.SpacingBefore = 20; tabla_precio_total.HorizontalAlignment = 0; PdfPCell celda_tabla_precio_total_nombre = null; if (datosreserva.descuento == 0) { celda_tabla_precio_total_nombre = new PdfPCell(new Phrase(Mensajes.menasje38, fuente)); } else { celda_tabla_precio_total_nombre = new PdfPCell(new Phrase(String.Format(Mensajes.mensaje39, datosreserva.descuento), fuente)); } celda_tabla_precio_total_nombre.HorizontalAlignment = PdfCell.ALIGN_RIGHT; celda_tabla_precio_total_nombre.BorderWidthRight = 0; celda_tabla_precio_total_nombre.PaddingBottom = 5; decimal total = 0; if (datosreserva.preciogrupo) { total = (precios.preciogrupo) - (precios.preciogrupo * ((decimal)datosreserva.descuento / 100)); } else { total = (precios.totaladulto + precios.totalinfante + precios.totalnino + precios.totaljunior + precios.totalsenior) - ((precios.totaladulto + precios.totalinfante + precios.totalnino + precios.totaljunior + precios.totalsenior) * ((decimal)datosreserva.descuento / 100)); } PdfPCell celda_tabla_precio_total_precio = new PdfPCell(new Phrase(Math.Round(total, 2).ToString() + " €", fuente)); celda_tabla_precio_total_precio.HorizontalAlignment = PdfCell.ALIGN_RIGHT; celda_tabla_precio_total_precio.BorderWidthLeft = 0; celda_tabla_precio_total_precio.PaddingBottom = 5; tabla_precio_total.AddCell(celda_tabla_precio_total_nombre); tabla_precio_total.AddCell(celda_tabla_precio_total_precio); doc.Add(tabla_precio_total); #endregion if (existepuntorecogida) { var datospunto = contexto.puntorecogida.Where(x => x.id == datosreserva.punto.id).Select(x => new { pais = x.localidad.provincia.pais.nombre, provincia = x.localidad.provincia.nombre, localidad = x.localidad.nombre, cp = x.localidad.cp }).First(); #region tabla_punto PdfPTable tabla_punto = new PdfPTable(2); tabla_punto.WidthPercentage = 100; tabla_punto.SetWidths(new float[] { 20, 80 }); tabla_punto.SpacingBefore = 20; Dictionary <string, string> puntodic = new Dictionary <string, string>(); puntodic.Add(Mensajes.mensaje9, datosreserva.punto.nombre); puntodic.Add(Mensajes.mensaje5, datosreserva.punto.direccion); puntodic.Add(Mensajes.mensaje11, datospunto.localidad); puntodic.Add(Mensajes.mensaje12, datospunto.provincia); puntodic.Add(Mensajes.mensaje13, datospunto.pais); puntodic.Add(Mensajes.mensaje14, datospunto.cp.ToString()); puntodic.Add(Mensajes.mensaje6, String.Format(clavevalor["googlemap"], datosreserva.punto.lat, datosreserva.punto.lng)); PdfPCell cel = null; var puntotext = new Phrase(Mensajes.mensaje8, bold); cel = new PdfPCell(puntotext); cel.Colspan = 2; cel.HorizontalAlignment = PdfCell.ALIGN_LEFT; cel.PaddingBottom = 10; cel.BorderWidthBottom = 0; tabla_punto.AddCell(cel); foreach (KeyValuePair <string, string> val in puntodic) { cel = new PdfPCell(new Phrase(val.Key, bold)); cel.BorderWidthBottom = 0; cel.BorderWidthRight = 0; cel.BorderWidthTop = 0; tabla_punto.AddCell(cel); cel = new PdfPCell(new Phrase(val.Value, fuente)); cel.BorderWidthBottom = 0; cel.BorderWidthLeft = 0; cel.BorderWidthTop = 0; tabla_punto.AddCell(cel); } PdfPRow last = tabla_punto.GetRow(tabla_punto.Rows.Count - 1); last.GetCells()[0].BorderWidthBottom = 0.5F; last.GetCells()[0].PaddingBottom = 5; last.GetCells()[1].BorderWidthBottom = 0.5F; last.GetCells()[1].PaddingBottom = 5; doc.Add(tabla_punto); #endregion } else { #region tabla_punto PdfPTable tabla_punto = new PdfPTable(2); tabla_punto.WidthPercentage = 100; tabla_punto.SetWidths(new float[] { 20, 80 }); tabla_punto.SpacingBefore = 20; Dictionary <string, string> puntodic = new Dictionary <string, string>(); puntodic.Add(Mensajes.mensaje5, datosreserva.direccion); puntodic.Add(Mensajes.mensaje11, datosreserva.localidad); puntodic.Add(Mensajes.mensaje12, datosreserva.provincia); puntodic.Add(Mensajes.mensaje13, datosreserva.pais); puntodic.Add(Mensajes.mensaje14, datosreserva.codigopostal.ToString()); puntodic.Add(Mensajes.mensaje6, String.Format(clavevalor["googlemap"], datosreserva.lat, datosreserva.lng)); PdfPCell cel = null; var puntotext = new Phrase(Mensajes.mensaje7, bold); cel = new PdfPCell(puntotext); cel.Colspan = 2; cel.HorizontalAlignment = PdfCell.ALIGN_LEFT; cel.PaddingBottom = 10; cel.BorderWidthBottom = 0; tabla_punto.AddCell(cel); foreach (KeyValuePair <string, string> val in puntodic) { cel = new PdfPCell(new Phrase(val.Key, bold)); cel.BorderWidthBottom = 0; cel.BorderWidthRight = 0; cel.BorderWidthTop = 0; tabla_punto.AddCell(cel); cel = new PdfPCell(new Phrase(val.Value, fuente)); cel.BorderWidthBottom = 0; cel.BorderWidthLeft = 0; cel.BorderWidthTop = 0; tabla_punto.AddCell(cel); } PdfPRow last = tabla_punto.GetRow(tabla_punto.Rows.Count - 1); last.GetCells()[0].BorderWidthBottom = 0.5F; last.GetCells()[0].PaddingBottom = 5; last.GetCells()[1].BorderWidthBottom = 0.5F; last.GetCells()[1].PaddingBottom = 5; doc.Add(tabla_punto); #endregion } #region tabla_importante PdfPTable tabla_importante = new PdfPTable(1); tabla_importante.WidthPercentage = 100; tabla_importante.SpacingBefore = 20; PdfPCell celda_tabla_importante_importante = new PdfPCell(new Phrase(Mensajes.mensaje3, bold)); celda_tabla_importante_importante.HorizontalAlignment = PdfCell.ALIGN_LEFT; celda_tabla_importante_importante.BorderWidthBottom = 0; celda_tabla_importante_importante.PaddingBottom = 10; PdfPCell celda_tabla_importante_desc = null; if (existepuntorecogida) { celda_tabla_importante_desc = new PdfPCell(new Phrase(String.Format(Mensajes.mensaje2, datosreserva.telefono), fuente)); } else { celda_tabla_importante_desc = new PdfPCell(new Phrase(String.Format(Mensajes.mensaje4, datosreserva.fecha.ToString("dd-MM-yyyy"), datosreserva.fecha.ToString("HH:mm:ss"), datosreserva.telefono), fuente)); } celda_tabla_importante_importante.HorizontalAlignment = PdfCell.ALIGN_LEFT; celda_tabla_importante_desc.PaddingBottom = 5; celda_tabla_importante_desc.BorderWidthTop = 0; tabla_importante.AddCell(celda_tabla_importante_importante); tabla_importante.AddCell(celda_tabla_importante_desc); doc.Add(tabla_importante); #endregion #region tabla_condiciones PdfPTable tabla_items = new PdfPTable(1); tabla_items.WidthPercentage = 100; tabla_items.SpacingBefore = 50; tabla_items.HorizontalAlignment = 0; PdfPCell celda_tabla_items = null; foreach (var item in facturaitems) { celda_tabla_items = new PdfPCell(new Phrase(item.nombre.ToUpper() + ": " + item.descripcion, pequeña)); celda_tabla_items.HorizontalAlignment = PdfCell.ALIGN_LEFT; celda_tabla_items.Border = 0; celda_tabla_items.PaddingBottom = 10; tabla_items.AddCell(celda_tabla_items); } doc.Add(tabla_items); #endregion doc.Close(); writer.Close(); }
/// <summary> /// Converts Расписашка (*.db) database file with schedule to Microsoft Office Publisher 2010 (*.pub) file /// </summary> /// <param name="inPath">full path to Расписашка (*.db) database file with schedule</param> /// <param name="outPath">full path to Публикация Publisher 2010 (*.pub) publication file with converted schedule</param> /// <param name="backWorker">BackgroundWorker for reporting progress</param> /// <returns>full path to converted Microsoft Office Publisher 2010 (*.pub) file</returns> private void convertDatabase(string inPath, string outPath, BackgroundWorker backWorker) { //string savePath = inPath.Substring(0, inPath.Length - 3) + ".pdf"; // TODO: Database format no longer supported. SQLiteConnection dbConnection = new SQLiteConnection("Data Source=" + inPath + ";Version=3"); dbConnection.Open(); //const string command = "SELECT lessons._id, lessons.day, lessons.time, lessons.weeks, subjects.name AS subject, types.name AS type, types._id AS type_id, teachers.name AS teacher_short, places.name AS place" + // " FROM lessons, lesson_records les_rec_places, lesson_records les_rec_types, lesson_records les_rec_teachers, records subjects, records places, records types, records teachers" + // " WHERE lessons._id == les_rec_places.lesson_id AND lessons._id == les_rec_types.lesson_id AND lessons._id == les_rec_teachers.lesson_id AND lessons.subject_id == subjects._id AND les_rec_places.record_id == places._id AND places.type == 2 AND les_rec_types.record_id == types._id AND types.type == 3 AND les_rec_teachers.record_id == teachers._id AND teachers.type == 1"; //SQLiteCommand dbCommand = new SQLiteCommand(command, dbConnection); //SQLiteDataReader dbReader = dbCommand.ExecuteReader(); Document pdfDoc; if (_isVerticalPage) { pdfDoc = new Document(PageSize.A4, PAGE_MARGIN_LEFT, PAGE_MARGIN_RIGHT, PAGE_MARGIN_TOP, PAGE_MARGIN_BOTTOM); } else { pdfDoc = new Document(PageSize.A4.Rotate(), PAGE_MARGIN_LEFT, PAGE_MARGIN_RIGHT, PAGE_MARGIN_TOP, PAGE_MARGIN_BOTTOM); } PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, new FileStream(outPath, FileMode.Create)); pdfDoc.Open(); //PdfContentByte canvas = pdfWriter.DirectContent; // Create tables PdfPTable daysTable; if (_isVerticalPage) { daysTable = new PdfPTable(2); } else { daysTable = new PdfPTable(3); } daysTable.WidthPercentage = 100.0f; PdfPTable[] tables = new PdfPTable[10]; string[] weekDays = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница" }; string weekDay; for (int i = 0; i < 10; i++) { PdfPTable table = new PdfPTable(5); // Setup rows/cols sizes //table.SetTotalWidth(new float[] { 0.42f, 0.43f, 3.62f, 1.38f, 3.38f }); table.SetTotalWidth(new float[] { CentimetersToPoints(0.42f), CentimetersToPoints(0.43f), CentimetersToPoints(3.62f), CentimetersToPoints(1.38f), CentimetersToPoints(3.38f) }); if (_isVerticalPage) { weekDay = weekDays[i / 2]; } else { weekDay = weekDays[i % 5]; } // Header with weekday name PdfPCell cell = new PdfPCell(new Phrase(weekDay, new Font(arialbiFont, 10.0f))); cell.Colspan = 5; cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; cell.FixedHeight = CentimetersToPoints(0.63f); table.AddCell(cell); for (int row = 0; row < 5; row++) { // Is lecture cell = new PdfPCell(); cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; cell.FixedHeight = CentimetersToPoints(0.63f); cell.Padding = CentimetersToPoints(0.1016f); //cell.BorderWidth = 0.5f; table.AddCell(cell); // # number cell = new PdfPCell(new Phrase((row + 1).ToString(), new Font(arialbFont, 10.0f))); cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; cell.FixedHeight = CentimetersToPoints(0.63f); cell.Padding = CentimetersToPoints(0.1016f); //cell.BorderWidth = 0.5f; table.AddCell(cell); // subject title cell = new PdfPCell(); cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; cell.FixedHeight = CentimetersToPoints(0.63f); cell.Padding = CentimetersToPoints(0.1016f); //cell.BorderWidth = 0.5f; table.AddCell(cell); // place cell = new PdfPCell(); cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; cell.FixedHeight = CentimetersToPoints(0.63f); cell.Padding = CentimetersToPoints(0.1016f); //cell.BorderWidth = 0.5f; table.AddCell(cell); // teacher cell = new PdfPCell(); cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; cell.FixedHeight = CentimetersToPoints(0.63f); cell.Padding = CentimetersToPoints(0.1016f); //cell.BorderWidth = 0.5f; table.AddCell(cell); } //table.CompleteRow(); tables[i] = table; backWorker.ReportProgress((int)(i / 10.0f * 75)); } daysTable.AddCell(tables[0]); daysTable.AddCell(tables[1]); daysTable.AddCell(tables[2]); daysTable.AddCell(tables[3]); daysTable.AddCell(tables[4]); if (!_isVerticalPage) { daysTable.AddCell(new PdfPCell()); } daysTable.AddCell(tables[5]); daysTable.AddCell(tables[6]); daysTable.AddCell(tables[7]); daysTable.AddCell(tables[8]); daysTable.AddCell(tables[9]); if (!_isVerticalPage) { daysTable.AddCell(new PdfPCell()); } for (int rowIndex = 0; rowIndex < daysTable.Rows.Count; rowIndex++) { PdfPRow row = (PdfPRow)daysTable.Rows[rowIndex]; //foreach (PdfPCell cell in row.GetCells()) //{ // cell.Border = PdfPCell.NO_BORDER; // cell.PaddingLeft = 0.0f; // cell.PaddingTop = 0.0f; // cell.PaddingRight = CentimetersToPoints(0.5f); // cell.PaddingBottom = CentimetersToPoints(0.5f); //} PdfPCell[] cells = row.GetCells(); for (int cellIndex = 0; cellIndex < cells.Length; cellIndex++) { cells[cellIndex].Border = PdfPCell.NO_BORDER; cells[cellIndex].PaddingLeft = 0.0f; cells[cellIndex].PaddingTop = 0.0f; if (_isVerticalPage) { if (cellIndex % 2 == 0) { cells[cellIndex].PaddingRight = CentimetersToPoints(0.5f); } else { cells[cellIndex].PaddingRight = 0.0f; } cells[cellIndex].PaddingBottom = CentimetersToPoints(0.5f); } else { if (cellIndex != 2) { cells[cellIndex].PaddingRight = CentimetersToPoints(0.5f); } else { cells[cellIndex].PaddingRight = 0.0f; } if (rowIndex != 1) { cells[cellIndex].PaddingBottom = CentimetersToPoints(0.5f); } else { cells[cellIndex].PaddingBottom = CentimetersToPoints(1.5f); } } } } string command = "SELECT lesson_records.record_id, lessons.day, lessons.weeks, lessons.time, records.name" + " FROM lesson_records" + " INNER JOIN lessons ON lesson_records.lesson_id = lessons._id" + " INNER JOIN records ON lessons.subject_id = records._id AND records.type = 0"; SQLiteCommand dbCommand = new SQLiteCommand(command, dbConnection); SQLiteDataReader dbReader = dbCommand.ExecuteReader(); // Fill data string subject, place, teacher_short; long type_id; string week; long day, number; byte[] time_blob; int index; int counter = 0; while (dbReader.Read()) { long record_id = (long)dbReader["record_id"]; day = (long)dbReader["day"]; time_blob = (byte[])dbReader["time"]; number = TimeToLessonNumber(time_blob); week = (string)dbReader["weeks"]; subject = (string)dbReader["name"]; //subject = (string)dbReader["subject"]; //place = (string)dbReader["place"]; //teacher_short = (string)dbReader["teacher_short"]; //type_id = (long)dbReader["type_id"]; //week = (string)dbReader["weeks"]; //day = (long)dbReader["day"]; //time_blob = (byte[])dbReader["time"]; //number = TimeToLessonNumber(time_blob); command = "SELECT records.name, records.type" + " FROM records" + " WHERE records._id == " + record_id; dbCommand = new SQLiteCommand(command, dbConnection); SQLiteDataReader dbRecReader = dbCommand.ExecuteReader(); dbRecReader.Read(); string rec_name = (string)dbRecReader["name"]; long type = (long)dbRecReader["type"]; if (week == "a") // all: 1,2,3,... { if (_isVerticalPage) { index = (int)(day - 1) * 2; } else { index = (int)(day - 1); } if (record_id == 1) { tables[index].GetRow((int)number).GetCells()[0].Phrase = new Phrase("+", new Font(arialbFont, 10.0f)); } if (type == 2) { tables[index].GetRow((int)number).GetCells()[3].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } else if (type == 1) { tables[index].GetRow((int)number).GetCells()[4].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } tables[index].GetRow((int)number).GetCells()[2].Phrase = new Phrase(subject, new Font(arialFont, 10.0f)); if (_isVerticalPage) { index = (int)day * 2 - 1; } else { index = (int)day + 4; } if (record_id == 1) { tables[index].GetRow((int)number).GetCells()[0].Phrase = new Phrase("+", new Font(arialbFont, 10.0f)); } if (type == 2) { tables[index].GetRow((int)number).GetCells()[3].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } else if (type == 1) { tables[index].GetRow((int)number).GetCells()[4].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } tables[index].GetRow((int)number).GetCells()[2].Phrase = new Phrase(subject, new Font(arialFont, 10.0f)); } else if (week == "e") // even: 2,4,6,... { if (_isVerticalPage) { index = (int)day * 2 - 1; } else { index = (int)day + 4; } if (record_id == 1) { tables[index].GetRow((int)number).GetCells()[0].Phrase = new Phrase("+", new Font(arialbFont, 10.0f)); } if (type == 2) { tables[index].GetRow((int)number).GetCells()[3].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } else if (type == 1) { tables[index].GetRow((int)number).GetCells()[4].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } tables[index].GetRow((int)number).GetCells()[2].Phrase = new Phrase(subject, new Font(arialFont, 10.0f)); } else if (week == "o") // odd: 1,3,5,... { if (_isVerticalPage) { index = (int)(day - 1) * 2; } else { index = (int)(day - 1); } if (record_id == 1) { tables[index].GetRow((int)number).GetCells()[0].Phrase = new Phrase("+", new Font(arialbFont, 10.0f)); } if (type == 2) { tables[index].GetRow((int)number).GetCells()[3].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } else if (type == 1) { tables[index].GetRow((int)number).GetCells()[4].Phrase = new Phrase(rec_name, new Font(arialFont, 10.0f)); } tables[index].GetRow((int)number).GetCells()[2].Phrase = new Phrase(subject, new Font(arialFont, 10.0f)); } backWorker.ReportProgress((int)(++counter / (float)dbReader.StepCount * 24 + 75)); } //for (int tableIndex = 0; tableIndex < tables.Length; tableIndex++) //{ // tables[tableIndex].WriteSelectedRows(0, -1, CentimetersToPoints(0.5f) + tableIndex * CentimetersToPoints(9.75f), CentimetersToPoints(20.5f), canvas); //} pdfDoc.Add(daysTable); pdfDoc.Close(); backWorker.ReportProgress(100); }