Vanguarsoft Developers blog

Ing. Javier Leal -Desarrollador CPANAX C.A / Microsoft Student Partners – VENEZUELA

Imprimir desde Silverlight Clase PrintDocument

1 comentario

Luego de ver algunas dudas en el MSDN sobre esta clase decidí colocar este post para hacer varias aclaraciones acerca de como imprimir desde Silverlight.

EN el Concepto que se ve en MSDN nos dice:

Proporciona capacidades de impresión para una aplicación de Silverlight.

Fuente: http://msdn.microsoft.com/en-us/library/system.windows.printing.printdocument(v=vs.95).aspx

Vamos al punto Si quieres imprimir un documento largos en Silverlight lo mejor es que permitas que el usuario descargue el archivo .doc .txt .pdf cual sea el formato y luego el mismo puede imprimirlo fácilmente.

Cuando queremos imprimir en Silverlight directamente puedes imprimir una captura de pantalla del lienzo completo o de una parte del mismo.

Para hacer un método de impresión en Silverlight es realmente Sencillo.. Vamos a poner como ejemplo que queremos imprimir el siguiente lienzo.

<StackPanel x:Name="LayoutRoot">
      <Button Margin="5" Width="200" Content="Click to print" x:Name="PrintButton" 
              Click="PrintButton_Click" />
      <Image Width="600"  Height="600" Source="RedmondMap.jpg" x:Name="mapImage"/>
  </StackPanel>

Cada uno de estos objetos tiene su nombre identificador pues eso es lo que necesitamos hacer para que imprima nuestro lienzo.

public partial class MainPage : UserControl
{
    PrintDocument pd; 

    public MainPage()
    {
        InitializeComponent();
        pd = new PrintDocument();
        pd.PrintPage += new EventHandler<PrintPageEventArgs>(pd_PrintPage);

    }

    private void PrintButton_Click(object sender, RoutedEventArgs e)
    {
      pd.Print("My Map");
    }

    void pd_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.PageVisual = LayoutRoot;
    }
}

 

Como pueden ver solo tienen que Declarar un Objeto de tipo PrintDocument e instanciarlo una vez que lo instanciamos llamar a su evento PrintPage este evento solo se ejecutara al llamar desde un botón o cualquier acción del tu aplicación al método Print. y colocarle un nombre.

Nosotros también podríamos construir nuestro reporte mediante código Dinámico y enviarlo directamente a Imprimir sin que se visualice antes y este tiene un tamaño máximo por lo tanto puede salir recortado.

Utilice el BeginPrint evento para realizar un manejo especial o establecer antes de que comience la impresión. Utilice el EndPrint evento para limpieza u otras operaciones después de finalizar la impresión o para detectar los errores que se produjeron durante el proceso de impresión con la EndPrintEventArgs . Error propiedad.

Acá les dejo otra forma de hacer una impresión los que imprimimos lo llenamos de manera dinámica.

public partial class MainPage : UserControl

{

    //variables globales

    StackPanel panel;

    BitmapImage ImageBit = new BitmapImage();

    PrintDocument pd;

    public MainPage()

    {

        InitializeComponent();

        //instanciar la clase y crear el evento de impresion

        pd = new PrintDocument();

        pd.PrintPage += new EventHandler<PrintPageEventArgs>(pd_PrintPage);


        //instanciar una interfaz por codigo dinamico que no se visualizara en ningun lado solo sera por codigo y se plsmara en la impresióm

        panel = new StackPanel();

        //le damos un tamaño

        panel.Width = 800;

        panel.Height = 600;

        //le agregamos un titulo con un objeto stackpanel

        TextBlock titulo = new TextBlock();

        titulo.Text = "Titulo Imagen";

        //creamos un obejto imagen y en su propiedad source agregamos la variable bitmapImage a la cual logramos convertir desde el Stream

        //Image img = new Image();

        //img.Source = ImageBit;

        Rectangle rct = new Rectangle();

        rct.Height = 100;

        rct.Width = 100;

        rct.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;

        rct.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;

        rct.Fill = new SolidColorBrush(Colors.Blue);

        //Agregamos el texkto y la imagen al stackpanel

        panel.Children.Add(titulo);

        panel.Children.Add(rct);


        //llamamos al evento de impresion

       

    }


    void pd_PrintPage(object sender, PrintPageEventArgs e)

    {

        //una vez que el evento de impresion es llamado le agregas en panel que ya debe tener la imagen y tu titulo

        e.PageVisual = panel;

    }

    private void Button_Click_1(object sender, RoutedEventArgs e)

    {

      
        pd.Print("Mi impresion");

    }

}

Espero que les sea útil y hasta luego.

Autor: Ing. Javier J. Leal H.

Desarrollador en CPANAX C.A, Microsoft Student Partners de Venezuela Amantes de nuevas Tecnologías Desarrollador es Silverlight 5, Windows 8, Windows Phone, Influenciador y Orador en Actividades Tecnológicas Microsoft

Un pensamiento en “Imprimir desde Silverlight Clase PrintDocument

  1. Please let me know if you’re looking for
    a author for your weblog. You have some
    really great posts and I believe I would be a good asset. If
    you ever want to take some of the load off, I’d really like
    to write
    some articles for your blog in exchange for a link back
    to mine.
    Please shoot me an email if interested. Thanks!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s