jj 24.07, wix installer
This commit is contained in:
105
KommiCollo/ClassPrintReport.vb
Normal file
105
KommiCollo/ClassPrintReport.vb
Normal file
@@ -0,0 +1,105 @@
|
||||
Imports System
|
||||
Imports System.IO
|
||||
Imports System.Data
|
||||
Imports System.Text
|
||||
Imports System.Drawing
|
||||
Imports System.Drawing.Imaging
|
||||
Imports System.Drawing.Printing
|
||||
Imports System.Collections.Generic
|
||||
Imports System.Windows.Forms
|
||||
Imports Microsoft.Reporting.WinForms
|
||||
Public Class ClassPrintReport
|
||||
Implements IDisposable
|
||||
Private Shared m_currentPageIndex As Integer
|
||||
Private Shared m_streams As IList(Of Stream)
|
||||
|
||||
Private Function LoadSalesData() As DataTable
|
||||
' Create a new DataSet and read sales data file
|
||||
' data.xml into the first DataTable.
|
||||
Dim dataSet As New DataSet()
|
||||
dataSet.ReadXml("..\..\data.xml")
|
||||
Return dataSet.Tables(0)
|
||||
End Function
|
||||
|
||||
' Routine to provide to the report renderer, in order to
|
||||
' save an image for each page of the report.
|
||||
Private Shared Function CreateStream(ByVal name As String, ByVal fileNameExtension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
|
||||
Dim stream As Stream = New MemoryStream()
|
||||
m_streams.Add(stream)
|
||||
Return stream
|
||||
End Function
|
||||
|
||||
' Export the given report as an EMF (Enhanced Metafile) file.
|
||||
Private Shared Sub Export(ByVal report As LocalReport)
|
||||
Dim deviceInfo As String = "<DeviceInfo>" & _
|
||||
"<OutputFormat>EMF</OutputFormat>" & _
|
||||
"<PageWidth>4.1in</PageWidth>" & _
|
||||
"<PageHeight>5.8in</PageHeight>" & _
|
||||
"<MarginTop>0.2in</MarginTop>" & _
|
||||
"<MarginLeft>0.2in</MarginLeft>" & _
|
||||
"<MarginRight>0.2in</MarginRight>" & _
|
||||
"<MarginBottom>0.2in</MarginBottom>" & _
|
||||
"</DeviceInfo>"
|
||||
Dim warnings As Warning()
|
||||
m_streams = New List(Of Stream)()
|
||||
report.Render("Image", deviceInfo, AddressOf CreateStream, warnings)
|
||||
For Each stream As Stream In m_streams
|
||||
stream.Position = 0
|
||||
Next
|
||||
End Sub
|
||||
|
||||
' Handler for PrintPageEvents
|
||||
Private Shared Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
|
||||
Dim pageImage As New Metafile(m_streams(m_currentPageIndex))
|
||||
|
||||
' Adjust rectangular area with printer margins.
|
||||
Dim adjustedRect As New Rectangle(ev.PageBounds.Left - CInt(ev.PageSettings.HardMarginX), _
|
||||
ev.PageBounds.Top - CInt(ev.PageSettings.HardMarginY), _
|
||||
ev.PageBounds.Width, _
|
||||
ev.PageBounds.Height)
|
||||
|
||||
' Draw a white background for the report
|
||||
ev.Graphics.FillRectangle(Brushes.White, adjustedRect)
|
||||
|
||||
' Draw the report content
|
||||
ev.Graphics.DrawImage(pageImage, adjustedRect)
|
||||
|
||||
' Prepare for the next page. Make sure we haven't hit the end.
|
||||
m_currentPageIndex += 1
|
||||
ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
|
||||
End Sub
|
||||
|
||||
Private Shared Sub Print(printerName As String)
|
||||
If m_streams Is Nothing OrElse m_streams.Count = 0 Then
|
||||
Throw New Exception("Error: no stream to print.")
|
||||
End If
|
||||
Dim printDoc As New PrintDocument()
|
||||
printDoc.PrinterSettings.PrinterName = printerName
|
||||
If Not printDoc.PrinterSettings.IsValid Then
|
||||
Throw New Exception("Error: cannot find the default printer.")
|
||||
Else
|
||||
AddHandler printDoc.PrintPage, AddressOf PrintPage
|
||||
m_currentPageIndex = 0
|
||||
printDoc.Print()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' Create a local report for Report.rdlc, load the data,
|
||||
' export the report to an .emf file, and print it.
|
||||
Public Shared Sub Run(report As LocalReport)
|
||||
'Dim report As New LocalReport()
|
||||
'report.ReportPath = "..\..\Report.rdlc"
|
||||
'report.DataSources.Add(New ReportDataSource("Sales", LoadSalesData()))
|
||||
Export(report)
|
||||
Print("Schaum-Drucker")
|
||||
End Sub
|
||||
|
||||
Public Sub Dispose() Implements IDisposable.Dispose
|
||||
If m_streams IsNot Nothing Then
|
||||
For Each stream As Stream In m_streams
|
||||
stream.Close()
|
||||
Next
|
||||
m_streams = Nothing
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
Reference in New Issue
Block a user