Visita guiada: Imprimir con el objeto LocalReport (C#)
Esta visita guiada muestra cómo imprimir mediante programación con el objeto LocalReporty la función de devolución de llamada CreateStreamCallback.
Debe tener acceso al informe de ejemplo y el origen de datos. Para obtener más información, vea Datos e informe de ejemplo para visitas guiadas de impresión.
Realice los pasos siguientes para crear un proyecto de aplicación de Microsoft Visual Studio Console. En este ejemplo, creará la aplicación en Microsoft Visual C#.
-
En el menú Archivo, seleccione Nuevo y haga clic en Proyecto.
-
En el panel Tipos de proyecto, seleccione Visual C# y Windows.
-
En el panel Plantillas, seleccione Aplicación de consola para crear una aplicación de consola de Microsoft.
-
En el cuadro Nombre, escriba el nombre del proyecto: LocalReport Printing.
-
En el cuadro Ubicación, escriba el directorio en el que desea guardar el proyecto o haga clic en Examinar para buscarlo. El proyecto se abre con la ventana Código que muestra Program.cs.
-
El archivo Program.cs file debería estar abierto para edición. Si no lo está, haga doble clic en el archivo Program.cs en la ventana Explorador de soluciones.
-
Reemplace el código existente en el archivo Program.cs con el código siguiente. Asegúrese de reemplazar las referencias del informe con rutas de acceso válidas a informes de muestra en el equipo local. No agregue los archivos Data.xml y Report.rdlc al proyecto. El proyecto subyacente tiene acceso a estos archivos mediante programación.
using System; using System.IO; using System.Data; using System.Text; using System.Drawing.Imaging; using System.Drawing.Printing; using System.Collections.Generic; using System.Windows.Forms; using Microsoft.Reporting.WinForms; public class Demo : IDisposable { private int m_currentPageIndex; private IList<Stream> m_streams; private DataTable LoadSalesData() { DataSet dataSet = new DataSet(); dataSet.ReadXml(@"c:\My Reports\data.xml"); return dataSet.Tables[0]; } private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) { Stream stream = new FileStream(@"c:\My Reports\" + name + "." + fileNameExtension, FileMode.Create); m_streams.Add(stream); return stream; } private void Export(LocalReport report) { string deviceInfo = "<DeviceInfo>" + " <OutputFormat>EMF</OutputFormat>" + " <PageWidth>8.5in</PageWidth>" + " <PageHeight>11in</PageHeight>" + " <MarginTop>0.25in</MarginTop>" + " <MarginLeft>0.25in</MarginLeft>" + " <MarginRight>0.25in</MarginRight>" + " <MarginBottom>0.25in</MarginBottom>" + "</DeviceInfo>"; Warning[] warnings; m_streams = new List<Stream>(); report.Render("Image", deviceInfo, CreateStream, out warnings); foreach (Stream stream in m_streams) stream.Position = 0; } private void PrintPage(object sender, PrintPageEventArgs ev) { Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); ev.Graphics.DrawImage(pageImage, ev.PageBounds); m_currentPageIndex++; ev.HasMorePages = (m_currentPageIndex < m_streams.Count); } private void Print() { const string printerName = "Microsoft Office Document Image Writer"; if (m_streams == null || m_streams.Count == 0) return; PrintDocument printDoc = new PrintDocument(); printDoc.PrinterSettings.PrinterName = printerName; if (!printDoc.PrinterSettings.IsValid) { string msg = String.Format("Can't find printer \"{0}\".", printerName); MessageBox.Show(msg, "Print Error"); return; } printDoc.PrintPage += new PrintPageEventHandler(PrintPage); printDoc.Print(); } private void Run() { LocalReport report = new LocalReport(); report.ReportPath = @"c:\My Reports\Report.rdlc"; report.DataSources.Add(new ReportDataSource("Sales", LoadSalesData())); Export(report); m_currentPageIndex = 0; Print(); } public void Dispose() { if (m_streams != null) { foreach (Stream stream in m_streams) stream.Close(); m_streams = null; } } public static void Main(string[] args) { using (Demo demo = new Demo()) { demo.Run(); } } }
-
En el menú Generar, haga clic en Generar solución para generar la aplicación. Como parte del proceso de generación, se compila el informe y se agregan todos los errores encontrados (tales como un error de sintaxis en una expresión utilizada en el informe) a la Lista de tareas.
-
Presione F5 para ejecutar la aplicación.
Referencia
LocalReportMicrosoft.Reporting.WinForms.CreateStreamCallback
Microsoft.Reporting.WebForms.CreateStreamCallback