Bonjour,
J'aimerais cliquer sur un bouton de mon application web et imprimer un rapport Reporting Services que j'ai au préalable créé avec SSRS.
Savez-vous comment dois-je m'y prendre ?
Merci pour votre retour.
Version imprimable
Bonjour,
J'aimerais cliquer sur un bouton de mon application web et imprimer un rapport Reporting Services que j'ai au préalable créé avec SSRS.
Savez-vous comment dois-je m'y prendre ?
Merci pour votre retour.
Client-side ou bien server-side?
Côté client, oui !
Dans les deux cas, tu peux passer par le composant reportviewer. Inspires-toi de ce lien ou de ceci.
En mode local, tu devrais avoir:
alors qu'en mode server-side, tu auras:Code:
1
2
3 LocalReport report = new LocalReport(); report.ReportPath = @"..\..\Report.rdlc"; //... la suite de ton code d'impression
Code:
1
2
3
4 var report = new ServerReport(); report.ReportServerUrl = new Uri("http://localhost/Reportserver"); // à remplacer par l'adresse de ton serveur de rapport report.ReportPath = "/MyReportDirectory/MyReport01"; // le chemin vers ton report //... la suite de ton code d'impression
Justement, je veux éviter de passer par le ReportViewer...
J'aimerais directement imprimer mon rapport sans le visualiser.
As-tu consulté le premier lien (Printing a Local Report without Preview) que j'ai donné précédemment? Tout y est expliqué.
Oui, merci pour le lien.
Mais mon application est une application web et pas une windows form.
Je me retrouve avec du code exprès pour du windows form donc c'est un peu compliqué.
En fait, c'est le même principe pour les webforms et si tu suis la méthodologie indiquée dans le lien, tu devrais arriver au même résultat. le principe est de faire un render de ton report vers un objet EMF et d'utiliser l'objet .Net PrintDocument pour imprimer directement le fichier image EMF via une imprimante donnée.
Télécharge ReportPrintDocument et intègre le à ton projet. Ensuite, tu peux faire ceci:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 private void PrintProcess(string numeroFacture) { var report = new LocalReport(); report.DataSources.Add(new ReportDataSource("UnDataSet",TaSourceDeDonnees); report.ReportEmbeddedResource = "TonProject.Reports.ImmaCustomerBill.rdlc"; // Chemin vers le fichier rdlc // ou dans le cas ou le rapport n'est pas une EmbeddedResource: //LocalReport report = new LocalReport(); //report.ReportPath = @"..\..\Report.rdlc"; // Si c'est un server-side report: var report = new ServerReport(); report.ReportServerUrl = new Uri("http://MyServerAddress/Reportserver"); // Mettre l'adresse de ton serveur de rapport report.ReportPath = "/YouReportDirectory/NameOfTheReport"; // chemin d'accès vers l"état à imprimer // Definition des paramètres var param = new ReportParameter[2]; param[0] = new ReportParameter("Param1", "Valeur param 1"); param[1] = new ReportParameter("Param2", "Valeur param 1"); try { report.SetParameters(param); var pdoc = new ReportPrintDocument(report); string strDefaultPrinter = RetrieveDefaultPrinterName(); if (strDefaultPrinter == null) { MessageBox.Show("Aucune imprimante n'a été défini sur votre ordinateur"); return; } pdoc.PrinterSettings.PrinterName = strDefaultPrinter; // Imprimera ton état sans passer par le "Print Settings Dialog" pdoc.Print(); } catch (Exception ex) { MessageBox.Show("Une erreur s'est produite au cours de l'impression du rapport" + ex.Message); } } // Ce code retournera le nom de l'imprimante par défaut. private static string RetrieveDefaultPrinterName() { var prtdoc = new PrintDocument(); var strDefaultPrinter = prtdoc.PrinterSettings.PrinterName; if (strDefaultPrinter == null) throw new ArgumentNullException("Pas d'imprimante installée sur votre ordinateur"); return strDefaultPrinter; }
Se basant sur ce topic, il semble qu'il n'est pas possible avec les pages aspx d'imprimer directement sur le default printer du client sans aucune notification. Il est donc conseillé d'afficher un preview du report à l'aide du composant reportviewer et permettre à l'utilisateur d'imprimer en choisissant l'imprimante requise.
Sinon, il y a aussi ce topic qui pourra bien te servir.
Mais comment déclencher le PrintProcess() ??
Et je dois intégrer la classe ReportPrintDocument.cs dans mon projet? Mais impossible d'accéder aux méthodes..