Automatiserad utskrift av SQL Server-rapporter

Jag har kämpat med att skriva ut SQL Server Reporting Services (SSRS)-rapporter. SSRS är ett utmärkt verktyg för att göra rapporter från SQL Server-data, och det har ett riktigt lättanvänt gränssnitt, men ibland vill man integrera rapporterna i en applikation utan att användarna behöver navigera i SSRS-webbgränssnittet.

Automatiserad utskrift av SQL Server-rapporter

Visual Studio 2005 och 2008 kommer med en ReportViewer-kontroll, som du kan bädda in i en form av din egen design, och denna har en PrintDialog-metod som du kan anropa för att få den att visa dialogrutan Skriv ut, så att användaren kan välja hur många kopior av vilka sidor och på vilken skrivare de ska matas ut. Vad som definitivt saknas är något sätt att förhandsgranska den utskrivna utskriften och, ännu viktigare, vilket sätt att skriva ut en rapport utan att visa dialogrutan Skriv ut.

Detta är ofta nödvändigt när du behöver skriva ut rapporter snabbt. Till exempel kan du behöva automatisera produktionen av många rapporter – alla till samma skrivare, och du vill att användaren bara ska välja den skrivaren en gång och att applikationen ska ta hand om resten. Du vill definitivt inte att användaren ska behöva sitta där och bekräfta varje enskild utskriven kopia.
Epson Stylus Photo PX710W
Visual Studio har konceptet med ett generiskt PrintDocument, som kan skickas till vilken skrivare eller Print Preview-fönster som helst, men ReportViewer-kontrollen har ingen egenskap eller metod som kan returnera ett PrintDocument. Min lösning var att skriva en generisk klass som kapslade in och utökade funktionaliteten för ReportViewer-kontrollen för att tillhandahålla ett PrintDocument.

En ReportViewer-kontroll har ett ServerReport-objekt, som innehåller alla egenskaper som behövs för att definiera vilken rapport som ska visas och vad dess parametrar ska vara. (Det finns ett motsvarande LocalReport-objekt för när du har att göra med rapportdefinitioner som bearbetas lokalt snarare än på en server.) ServerReport-objektet tar en URI som pekar på rapportservern, vanligtvis namnet på din SQL Server, och en sökväg till rapportens definition. När du har ställt in dessa och eventuella parametrar som krävs för rapporten är ReportViewer redo att visa rapporten.

I det här fallet, istället för att visa ReportViewer-kontrollen för användaren, anropar vi dess Render-metod för att göra den layout på första sidan i rapporten som en EMF (Enhanced Metafile)-bild och returnera resultatet som en MemoryStream. Vi fortsätter att anropa Render-metoden, öka sidnumret vi begär, tills vi får tillbaka ett tomt MemoryStream-objekt. Vi lagrar alla dessa MemoryStream-objekt som vi har tagit emot i en lista och definierar sedan ett PrintDocument som returnerar EMF-bilden för lämplig sida närhelst dess PrintPage-metod anropas.

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *