Ciao,
hai provato a fare la stampa del report direttamente da codice, senza clicckare il pulsante di stampa del viewer?
Puoi farlo sull'oggetto LocalReport, con un codice di questo tipo:
public static string StampaReport(ReportViewer v,string pa, int nCopie, string stam)
{
try
{
SetParameters(v, pa);
LocalReport report = v.LocalReport;
byte[] bytes = Render(report, "image");
tiffs = GetPagine(Image.FromStream(new MemoryStream(bytes)));
//--- stampo con la classe di .net
PrintDocument doc = new PrintDocument();
doc.PrinterSettings.Copies = (short)nCopie;
doc.PrinterSettings.PrinterName = stam;
doc.DocumentName = Path.GetFileName(report.ReportPath);
doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
doc.Print();
}
catch (Exception ex)
{
return ex.ToString();
}
return string.Empty;
}
static int pag = 0;
static void doc_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.DrawImage(tiffs[pag++], e.PageBounds);
e.HasMorePages = pag <= tiffs.Count - 1;
if (!e.HasMorePages)
pag = 0;
}
public static List<Image> GetPagine(Image image)
{
List<Image> pagine = new List<Image>();
FrameDimension dimension = new FrameDimension(image.FrameDimensionsList[0]);
for (int i = 0; i < image.GetFrameCount(dimension); i++)
{
image.SelectActiveFrame(dimension, i);
pagine.Add(image.Clone() as Image);
}
return pagine;
}
questo è un codice che usavo io, se vuoi un altro esempio lo puoi trovare qui: http://www.gotreportviewer.com/ a destra in basso c'è proprio l'esempio che parla del Printing da Console...
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo