Example #1
0
        /// <summary>
        /// Zapisuje raport do pliku PDF i wyswietla o tym komunikat
        /// </summary>
        /// <param name="page">na stronie z wynikami ma sie pojawic komunikat</param>
        /// <param name="alloys">Lista skladnikow bioraca udzial w procesie</param>
        /// <param name="smelt">Jednoelementowa lista wytopu który chcemy zrealizowac</param>
        /// <param name="solut">Lista rozwi¹zañ</param>
        public void saveFileAndNotice(ProcessResults page, List <Alloy> alloys, List <Smelt> smelt, List <ProcessResults.Solution> solut)
        {
            try
            {
                //stworz folder
                var directory = new Java.IO.File(Android.OS.Environment.ExternalStorageDirectory, "OMIKAS_Raports").ToString();
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }

                //plik to data + nazwa
                path = Path.Combine(directory, DateTime.Now.ToString("yyMMddHHmm") + "OMIKAS_Raport.pdf");

                //jak istnieje to nadpisz plik
                if (File.Exists(path))
                {
                    File.Delete(path);
                }

                //=========================================================================================
                //================ Tworzenie PDF za polacza iTextSharp ====================================
                #region PDFCreation

                var fs = new FileStream(path, FileMode.Create);
                //Stworz pdf o rozmiarze i marginesach
                Document  document = new Document(PageSize.A4.Rotate(), 20, 20, 20, 20);
                PdfWriter writer   = PdfWriter.GetInstance(document, fs);
                document.Open();

                //font w pdfie
                BaseFont bf = BaseFont.CreateFont(
                    BaseFont.HELVETICA,
                    BaseFont.CP1252,
                    BaseFont.EMBEDDED);
                iTextSharp.text.Font font = new iTextSharp.text.Font(bf, 10);

                //metadane pliku
                document.AddAuthor("OMIKAS");
                document.AddCreator(App.DAUtil.GetUser().ElementAt(0).user_name + " " + App.DAUtil.GetUser().ElementAt(0).user_surname);
                document.AddKeywords("PDF alloys metallurgy education");
                document.AddSubject("Raport");
                document.AddTitle("OMIKAS Raport");

                //naglowek raportu
                document.Add(new Paragraph("Raport OMIKAS - Karta wytopu w prózniowym piecu indukcyjnym.", font));
                if (ProcessResults.isWeightType)
                {
                    document.Add(new Paragraph("Optymalizacja masowa.", font));
                }
                else
                {
                    document.Add(new Paragraph("Optymalizacja kosztowa.", font));
                }
                document.Add(new Paragraph("Autor: " + App.DAUtil.GetUser().ElementAt(0).user_name + " " + App.DAUtil.GetUser().ElementAt(0).user_surname, font));
                document.Add(new Paragraph("Data " + DateTime.Now.ToString(), font));

                //Cala glowna tabela - tabela wyswietla zawsze tylko kompletne rzêdy
                PdfPTable table = new PdfPTable(5 + alloys.Count);
                table.SpacingBefore   = 10;
                table.WidthPercentage = 100;

                double sum = 0;
                int    i   = 0;

                #region row1
                //pierwszy rz¹d komórek w tabeli
                table.AddCell(" ");
                PdfPCell cwytop = new PdfPCell(new Phrase("Wytop '" + smelt.ElementAt(0).name + "'", font));
                cwytop.Colspan             = 3;
                cwytop.HorizontalAlignment = 1;                 //0=Left, 1=Centre, 2=Right
                table.AddCell(cwytop);

                PdfPCell cwsad = new PdfPCell(new Phrase("Wsad [g]", font));
                cwsad.Colspan             = alloys.Count;
                cwsad.HorizontalAlignment = 1;
                table.AddCell(cwsad);
                table.AddCell(new Phrase(" ", font));
                #endregion

                #region row2
                table.AddCell(new Phrase("Pierwiastek", font));
                table.AddCell(new Phrase("min [%]", font));
                table.AddCell(new Phrase("max [%]", font));
                table.AddCell(new Phrase("wsp. par. [%]", font));
                //wszystkie nazwy skladnikow biorace udzial
                foreach (Alloy x in alloys)
                {
                    table.AddCell(new Phrase(x.name, font));
                }
                table.AddCell(new Phrase("TOTAL", font));                 //suma
                #endregion

                #region row3
                //rozwiazania stopow
                table.AddCell(new Phrase("TOTAL", font));
                table.AddCell(new Phrase(smelt.ElementAt(0).min_Norm.Sum().ToString(), font));
                table.AddCell(new Phrase("100", font));
                table.AddCell(new Phrase(smelt.ElementAt(0).evoporation.Sum().ToString(), font));
                sum = 0;
                foreach (ProcessResults.Solution x in solut)
                {
                    table.AddCell(new Phrase(x.solTxt, font));
                    sum += x.solNum;                     //oraz ich suma
                }
                table.AddCell(new Phrase(sum.ToString("0.000"), font));
                #endregion

                //reszta tabeli
                for (int j = 0; j < 29; j++)
                {
                    //wszystkie nazwy pierwiastkow
                    switch (j)
                    {
                        #region nameRows
                    case 0:
                        table.AddCell(new Phrase("Fe", font));
                        break;

                    case 1:
                        table.AddCell(new Phrase("C", font));
                        break;

                    case 2:
                        table.AddCell(new Phrase("Si", font));
                        break;

                    case 3:
                        table.AddCell(new Phrase("Mn", font));
                        break;

                    case 4:
                        table.AddCell(new Phrase("P", font));
                        break;

                    case 5:
                        table.AddCell(new Phrase("S", font));
                        break;

                    case 6:
                        table.AddCell(new Phrase("Cr", font));
                        break;

                    case 7:
                        table.AddCell(new Phrase("Mo", font));
                        break;

                    case 8:
                        table.AddCell(new Phrase("Ni", font));
                        break;

                    case 9:
                        table.AddCell(new Phrase("Al", font));
                        break;

                    case 10:
                        table.AddCell(new Phrase("Co", font));
                        break;

                    case 11:
                        table.AddCell(new Phrase("Cu", font));
                        break;

                    case 12:
                        table.AddCell(new Phrase("Nb", font));
                        break;

                    case 13:
                        table.AddCell(new Phrase("Ti", font));
                        break;

                    case 14:
                        table.AddCell(new Phrase("V", font));
                        break;

                    case 15:
                        table.AddCell(new Phrase("W", font));
                        break;

                    case 16:
                        table.AddCell(new Phrase("Pb", font));
                        break;

                    case 17:
                        table.AddCell(new Phrase("Sn", font));
                        break;

                    case 18:
                        table.AddCell(new Phrase("B", font));
                        break;

                    case 19:
                        table.AddCell(new Phrase("Ca", font));
                        break;

                    case 20:
                        table.AddCell(new Phrase("Zr", font));
                        break;

                    case 21:
                        table.AddCell(new Phrase("As", font));
                        break;

                    case 22:
                        table.AddCell(new Phrase("Bi", font));
                        break;

                    case 23:
                        table.AddCell(new Phrase("Sb", font));
                        break;

                    case 24:
                        table.AddCell(new Phrase("Zn", font));
                        break;

                    case 25:
                        table.AddCell(new Phrase("Mg", font));
                        break;

                    case 26:
                        table.AddCell(new Phrase("N", font));
                        break;

                    case 27:
                        table.AddCell(new Phrase("H", font));
                        break;

                    case 28:
                        table.AddCell(new Phrase("O", font));
                        break;

                    default:
                        table.AddCell(new Phrase("ERROR", font));
                        break;
                        #endregion
                    }
                    //parametry wytopu
                    table.AddCell(new Phrase(smelt.ElementAt(0).min_Norm[j].ToString(), font));
                    table.AddCell(new Phrase(smelt.ElementAt(0).max_Norm[j].ToString(), font));
                    table.AddCell(new Phrase(smelt.ElementAt(0).evoporation[j].ToString(), font));

                    sum = 0;
                    i   = 0;

                    //procentowa zawartosc razy masa skladnika to masa konkretnego piewiastka
                    foreach (ProcessResults.Solution x in solut)
                    {
                        if (alloys.ElementAt(i).tabOfElements[j] / 100 * x.solNum == 0)
                        {
                            table.AddCell(new Phrase(" ", font));
                        }
                        else
                        {
                            table.AddCell(new Phrase((alloys.ElementAt(i).tabOfElements[j] / 100 * x.solNum).ToString("0.0000"), font));
                        }
                        sum += x.solNum * alloys.ElementAt(i).tabOfElements[j] / 100;
                        i++;
                    }
                    table.AddCell(new Phrase(sum.ToString("0.000"), font));                     //suma
                }

                //dodaj tabele do dokumentu
                document.Add(table);

                document.Close();
                writer.Close();
                fs.Close();
                #endregion
                //=========================================================================================

                //Poka¿ komunikat i uruchom aplikacje do przegl¹dania PDF
                Java.IO.File file   = new Java.IO.File(path);
                Intent       intent = new Intent(Intent.ActionView);
                intent.SetDataAndType(Android.Net.Uri.FromFile(file), "application/pdf");
                page.DisplayAlert("Raport", "Raport wyeksportowano do " + path.ToString(), "OK");
                Forms.Context.StartActivity(intent);
            }
            catch (Exception ex)
            {
                page.DisplayAlert("Dziwny error dot. Raportu", "Coœ niespotykaniego " + ex.ToString(), "OK");
            }
        }