RE:Imprimir un local report
Publicado por
hansellkopp (1 intervención) el 09/07/2007 22:54:47
Hola yo tenia ese problema y baje un codigo de internet y lo puede dentro de una clase y me funciono perfecto, te anexo el codigo
// EJEMPLO DE USO
// report.ReportPath = "C:\Reportes\FacturaPrevia.rdlc";
// report.DataSources.Clear();
// report.DataSources.Add(new ReportDataSource("Myds_VistaFactura", //ds.VistaFactura));
// clsDirectPrint dp = new clsDirectPrint();
// dp.Run(report);
// CLASE
using System;
using System.IO;
using System.Data;
using System.Text;
using System.Drawing.Imaging;
using System.Drawing.Printing;
using System.Collections.Generic;
using Microsoft.Reporting.WinForms;
public class clsDirectPrint : IDisposable
{
private int m_currentPageIndex;
private IList<Stream> m_streams;
private Stream CreateStream(string name, string fileNameExtension, Encoding encoding,
string mimeType, bool willSeek)
{
Stream stream = new FileStream(name + "." + fileNameExtension, FileMode.Create);
m_streams.Add(stream);
return stream;
}
private void Export(LocalReport reportl)
{
ReportPageSettings p = report.GetDefaultPageSettings();
;
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(LocalReport report)
{
if (m_streams == null || m_streams.Count == 0)
return;
PrintDocument printDoc = new PrintDocument();
if (!printDoc.PrinterSettings.IsValid)
{
string msg = String.Format("Can't find printer \"{0}\".", printerName);
Console.WriteLine(msg);
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
printDoc.Print();
}
public void Run(LocalReport report)
{
report.Refresh();
Export(report);
m_currentPageIndex = 0;
Print(report);
}
public void Dispose()
{
if (m_streams != null)
{
foreach (Stream stream in m_streams)
stream.Close();
m_streams = null;
}
}
}