Hi FZelle,
danke für die Antwort.
Anbei die Klasse "Schnelldruck".
Vielleicht findest du ja den "Fehler"
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 cls_Schnelldruck
Implements IDisposable
Private m_currentPageIndex As Integer
Private m_streams As IList(Of Stream)
Private Sub Run(ByVal reportname As String, ByVal datatabelname As String, _
ByVal XML_Datei As String, ByVal zu_drucken As String)
Dim report As New LocalReport()
report.ReportEmbeddedResource = "IQDiagnostics." & reportname
report.DataSources.Add(New ReportDataSource(datatabelname, Laden_Daten( _
XML_Datei)))
Export(report)
Print(zu_drucken)
End Sub
Private Function Laden_Daten(ByVal XML_Datei As String) As DataTable
Dim dataSet As New DataSet()
dataSet.ReadXml("F:\IQDiagnostics\IQDiagnostics\bin\Debug\" & XML_Datei)
Return dataSet.Tables(0)
End Function
Private 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
Private Sub Export(ByVal report As LocalReport)
Try
Dim deviceInfo As String = "<DeviceInfo>" & _
"<OutputFormat>EMF</OutputFormat>" & _
"<PageWidth>8.5in</PageWidth>" & _
"<PageHeight>11in</PageHeight>" & _
"<MarginTop>0in</MarginTop>" & _
"<MarginLeft>0in</MarginLeft>" & _
"<MarginRight>0in</MarginRight>" & _
"<MarginBottom>0in</MarginBottom>" & _
"</DeviceInfo>"
Dim warnings As Warning()
warnings = Nothing
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
Catch
End Try
End Sub
Private Sub PrintPage(ByVal sender As Object, ByVal ev As _
PrintPageEventArgs)
Dim pageImage As New Metafile(m_streams(m_currentPageIndex))
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)
ev.Graphics.FillRectangle(Brushes.White, adjustedRect)
ev.Graphics.DrawImage(pageImage, adjustedRect)
m_currentPageIndex += 1
ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
End Sub
Private Sub Print(ByVal zu_drucken 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()
If Not printDoc.PrinterSettings.IsValid Then
Throw New Exception("Error: cannot find the default printer.")
Else
AddHandler printDoc.PrintPage, AddressOf PrintPage
m_currentPageIndex = 0
Try
printDoc.DefaultPageSettings.PrinterSettings.PrinterName = _
"Microsoft Office Document Image Writer"
printDoc.DefaultPageSettings.PrinterSettings.PrintFileName = _
"IQADiagnostics"
printDoc.Print()
Catch
End Try
End If
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
Public Shared Sub Formular_Drucken(ByVal reportname As String, ByVal _
datatabelname As String, ByVal XML_Datei As String, ByVal zu_drucken As _
String)
Using schnelldruck As New cls_Schnelldruck()
schnelldruck.Run(reportname, datatabelname, XML_Datei, zu_drucken)
End Using
End Sub
End Class |