예제 #1
0
        private async void TableFeaturesSample()
        {
            #region Field Definitions
            //Load product data.
            IEnumerable <Products> products = DataProvider.GetProducts();

            //Create a new PDF standard font
            PdfStandardFont font = new PdfStandardFont(PdfFontFamily.TimesRoman, 8f);

            PdfStandardFont smallFont = new PdfStandardFont(font, 5f);

            PdfFont bigFont = new PdfStandardFont(font, 16f);

            //Create a new PDF solid brush
            PdfBrush orangeBrush = new PdfSolidBrush(new PdfColor(247, 148, 29));

            PdfBrush grayBrush = new PdfSolidBrush(new PdfColor(170, 171, 171));

            //Create a new PDF pen
            PdfPen borderPen = new PdfPen(PdfBrushes.DarkGray, .3f);

            borderPen.LineCap = PdfLineCap.Square;

            PdfPen transparentPen = new PdfPen(PdfBrushes.Transparent, .3f);

            transparentPen.LineCap = PdfLineCap.Square;

            float margin = 40f;
            #endregion

            MemoryStream stream = new MemoryStream();

            //Create a new PDF document
            using (PdfDocument document = new PdfDocument())
            {
                //Set the margins
                document.PageSettings.Margins.All = 0;

                //Add a new PDF page
                PdfPage page = document.Pages.Add();

                //Add the document header
                AddHeader(document, "Syncfusion Essential PDF");

                //Add the document footer
                AddFooter(document, font, grayBrush);

                //Draw the text to the PDF page
                page.Graphics.DrawString("What You Get with Syncfusion", bigFont, orangeBrush, new PointF(10, 10));

                #region PdfGrid
                //Create a new PDF grid
                PdfGrid pdfGrid = new PdfGrid();

                IEnumerable <Report> report = DataProvider.GetReport();
                pdfGrid.DataSource = report;
                pdfGrid.Headers.Clear();
                pdfGrid.Columns[0].Width  = 80;
                pdfGrid.Style.Font        = font;
                pdfGrid.Style.CellSpacing = 15f;

                for (int i = 0; i < pdfGrid.Rows.Count; i++)
                {
                    if (i % 2 == 0)
                    {
                        PdfGridCell cell = pdfGrid.Rows[i].Cells[0];

                        cell.RowSpan = 2;

                        Stream imgStream = typeof(App).GetTypeInfo().Assembly.GetManifestResourceStream("SampleBrowser.Samples.PDF.Assets." + cell.Value.ToString().ToLower() + ".jpg");

                        //Set cell background image
                        cell.Style.BackgroundImage = new PdfBitmap(imgStream);

                        cell.Value = "";

                        cell = pdfGrid.Rows[i].Cells[1];

                        cell.Style.Font = bigFont;
                    }
                    for (int j = 0; j < pdfGrid.Columns.Count; j++)
                    {
                        pdfGrid.Rows[i].Cells[j].Style.Borders.All = transparentPen;
                    }
                }

                //Create a PDF grid layout format
                PdfGridLayoutFormat gridLayoutFormat = new PdfGridLayoutFormat();

                //Set pagination
                gridLayoutFormat.Layout = PdfLayoutType.Paginate;

                //Draw the grid to the PDF document
                pdfGrid.Draw(page, new RectangleF(new PointF(margin, 75), new SizeF(page.Graphics.ClientSize.Width - (2 * margin), page.Graphics.ClientSize.Height - margin)), gridLayoutFormat);
                #endregion

                //Save the PDF document
                document.Save(stream);
            }

            stream.Position = 0;

            if (IsToggled)
            {
                PdfViewerUI pdfViewer = new SampleBrowser.PdfViewerUI();
                pdfViewer.PdfDocumentStream = stream;
                if (Device.Idiom != TargetIdiom.Phone && Device.OS == TargetPlatform.Windows)
                {
                    await PDFViewModel.Navigation.PushModalAsync(new NavigationPage(pdfViewer));
                }
                else
                {
                    await PDFViewModel.Navigation.PushAsync(pdfViewer);
                }
            }
            else
            {
                if (Device.OS == TargetPlatform.WinPhone || Device.OS == TargetPlatform.Windows)
                {
                    Xamarin.Forms.DependencyService.Get <ISaveWindowsPhone>().Save("TableFeatures.pdf", "application/pdf", stream);
                }
                else
                {
                    Xamarin.Forms.DependencyService.Get <ISave>().Save("TableFeatures.pdf", "application/pdf", stream);
                }
            }
        }