Пример #1
0
 public static void BorderBottomRow(PdfPRow row)
 {
     foreach (var cell in row.GetCells())
     {
         cell.BorderBottom();
     }
 }
Пример #2
0
        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);
            }
        }
Пример #4
0
        /**
         * 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);
            }
        }
Пример #5
0
        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());
        }
Пример #6
0
        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();
        }
Пример #7
0
        /// <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);
        }