none
¿Alguien sabe de alguna libreria gratuita para imprimir el contenido completo de un DataGrid en WPF con todo su formato? RRS feed

  • Pregunta

  • ¿Alguien sabe de alguna libreria gratuita para imprimir el contenido completo de un DataGrid en WPF con todo su formato y sin los scrollbars?

    De momento lo unico que he conseguido es imprimir la vista del DataGrid (solo lo que se vé en pantalla) o solo el contenido (sin formato) y quiero que se vean los colores del texto. Muchas gracias de antemano

    • Cambiado Joyce_AC lunes, 19 de junio de 2017 15:18
    sábado, 17 de junio de 2017 9:50

Respuestas

Todas las respuestas

  • Hola Javier B.A

    Quizá te sirva el project de este enlace:

    WPF Print Engine: Part I

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    domingo, 18 de junio de 2017 1:34
  • Muchas gracias. Probaré a ver, antes de marcar como respondido déjame investigar como funciona la librería, por si me sirve o no

    domingo, 18 de junio de 2017 7:55
  • Tengo un problema con WPF Print Engine, he instalado todas las dll que están en “\WPFPrintEngine\Source\SUT.PrintEngine\bin\Debug” y cuando intento imprimir el dataGrid, me sale el dialogo pero no el dataGrid, no me sale nada… A ver si alguien me puede ayudar

     

     

    var visualSize = new Size(dataGrid2.ActualWidth, dataGrid2.ActualHeight);

                    var printControl = PrintControlFactory.Create(visualSize, dataGrid2);

                    printControl.ShowPrintPreview();

            

    domingo, 18 de junio de 2017 9:49
  • Hola @Javier B.A

    Tal vez esto ayude

    Print Datagrid records in WPF

    Printing WPF DataGrid Contents

    Espero la información brindada sea de utilidad.

    Saludos.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    • Marcado como respuesta Javier B.A miércoles, 21 de junio de 2017 16:02
    domingo, 18 de junio de 2017 13:12
  • Me temo mucho que estos dos últimos enlaces que me has proporcionado aun que imprimen con el formato original del dataGrid solo imprimen la página que está visible en pantalla.

    Muchas gracias de todos modos
    domingo, 18 de junio de 2017 14:45
  • Sin embargo, en el enlace pone que imprime todo el documento entero y lo he probado y solo me imprime la primera pagina visible, Cual es el fallo? Aquí está el código modificado que no hace lo que debiera:

    public string s_EN_Question_Print = "Imprimir?";

            public string s_EN_Info_Printing = "Imprimiendo";

     

            public void ImprimirDatagrid()

            {

      

                MessageBoxResult result = MessageBox.Show(s_EN_Question_Print, "Print", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (result == MessageBoxResult.Yes)

                {

                    try

                    {

                        var border = VisualTreeHelper.GetChild(GridPuente, 0) as Decorator;

                        if (border != null)

                        {

                            var scrollViewer = border.Child as ScrollViewer;

                            if (scrollViewer != null)

                            {

                                scrollViewer.ScrollToTop();

                                scrollViewer.ScrollToLeftEnd();

                            }

                        }

     

                        Title = _initialTitle + " - " + s_EN_Info_Printing;

     

                        var myPrinter = new UIPrinter { Title = Title, Content = GridPuente };

                        int nbrOfPages = myPrinter.Print();

     

                        Title = _initialTitle + " - " + myPrinter.s_EN_Info_PrintingDone + " (" + nbrOfPages + " Pages)";

                    }

                    catch (Exception ex)

                    {

                        Title = _initialTitle + " - " + ex.Message;

                        MessageBox.Show("" + ex);

                    }

                }

            }

    public class UIPrinter

    {

        #region Properties

        public string s_EN_Question_Print = "Imprimir?";

        public string s_EN_Info_PrintingAborted = "Impresión Abortada";

        public string s_EN_Info_Printing = "Imprimiendo";

        public string s_EN_Info_PrintingDone = "Impresión realizada con exito";

     

        public Int32 VerticalOffset { get; set; }

        public Int32 HorizontalOffset { get; set; }

        public String Title { get; set; }

        public UIElement Content { get; set; }

     

        #endregion

     

        #region Initialization

     

        public UIPrinter()

        {

            HorizontalOffset = 20;

            VerticalOffset = 20;

            Title = "Print " + DateTime.Now;

        }

     

        #endregion

     

        #region Methods

     

        public Int32 Print()

        {

            var dlg = new PrintDialog();

            if (dlg.ShowDialog() == true)

            {

                //---FIRST PAGE---//

                // Size the Grid.

                Content.Measure(new Size(Double.PositiveInfinity,

                                         Double.PositiveInfinity));

     

                Size sizeGrid = Content.DesiredSize;

     

                //check the width

                if (sizeGrid.Width > dlg.PrintableAreaWidth)

                {

                    MessageBoxResult result = MessageBox.Show(s_EN_Question_Print, "Print", MessageBoxButton.YesNo, MessageBoxImage.Question);

                    if (result == MessageBoxResult.No)

                        throw new System.InvalidOperationException(s_EN_Info_PrintingAborted);

                }

     

                // Position of the grid

                var ptGrid = new Point(HorizontalOffset, VerticalOffset);

     

                // Layout of the grid

                Content.Arrange(new Rect(ptGrid, sizeGrid));

     

                //print

                dlg.PrintVisual(Content, Title);

     

                //---MULTIPLE PAGES---//

                double diff;

                int i = 1;

                while ((diff = sizeGrid.Height - (dlg.PrintableAreaHeight - VerticalOffset * i) * i) > 0)

                {

                    //Position of the grid

                    var ptSecondGrid = new Point(HorizontalOffset, -sizeGrid.Height + diff + VerticalOffset);

     

                    // Layout of the grid

                    Content.Arrange(new Rect(ptSecondGrid, sizeGrid));

     

                    //print

                    int k = i + 1;

                    dlg.PrintVisual(Content, Title + " (Page " + k + ")");

     

                    i++;

                }

     

                return i;

            }

     

            throw new System.InvalidOperationException(s_EN_Info_PrintingAborted);

          

        }

     

        #endregion

    }

    domingo, 18 de junio de 2017 17:04