我正在尝试直接从 rdlc/报告查看器打印,但打印输出在 vb.net 中有红色标记
代码有问题吗
LocalReportExtensions
?
请指导我。
谢谢
Public Module LocalReportExtensions
<Extension()>
Sub Print(ByVal report As LocalReport, ByVal printerName As String)
Dim pageSettings = New PageSettings()
pageSettings.PaperSize = report.GetDefaultPageSettings().PaperSize
pageSettings.Landscape = report.GetDefaultPageSettings().IsLandscape
pageSettings.Margins = report.GetDefaultPageSettings().Margins
Print(report, pageSettings, printerName)
End Sub
<Extension()>
Sub Print(ByVal report As LocalReport, ByVal pageSettings As PageSettings, ByVal printerName As String)
Dim deviceInfo As String = $"<DeviceInfo>
<OutputFormat>EMF</OutputFormat>
<PageWidth>{pageSettings.PaperSize.Width * 100}in</PageWidth>
<PageHeight>{pageSettings.PaperSize.Height * 100}in</PageHeight>
<MarginTop>{pageSettings.Margins.Top * 100}in</MarginTop>
<MarginLeft>{pageSettings.Margins.Left * 100}in</MarginLeft>
<MarginRight>{pageSettings.Margins.Right * 100}in</MarginRight>
<MarginBottom>{pageSettings.Margins.Bottom * 100}in</MarginBottom>
</DeviceInfo>"
Dim warnings() As Warning
Dim streams = New List(Of Stream)()
Dim currentPageIndex = 0
report.Render("Image", deviceInfo,
Function(name, fileNameExtension, encoding, mimeType, willSeek)
Dim stream = New MemoryStream()
streams.Add(stream)
Return stream
End Function, warnings)
For Each stream As Stream In streams
stream.Position = 0
Next
If streams Is Nothing OrElse streams.Count = 0 Then
Throw New Exception("Error: no stream to print.")
End If
Dim printDocument = New PrintDocument()
printDocument.DefaultPageSettings = pageSettings
If Not printDocument.PrinterSettings.IsValid Then
Throw New Exception("Error: cannot find the default printer.")
Else
AddHandler printDocument.PrintPage,
Sub(sender, e)
Dim pageImage As Metafile = New Metafile(streams(currentPageIndex))
Dim adjustedRect As Rectangle = New Rectangle(
e.PageBounds.Left - CInt(e.PageSettings.HardMarginX),
e.PageBounds.Top - CInt(e.PageSettings.HardMarginY),
e.PageBounds.Width,
e.PageBounds.Height)
e.Graphics.FillRectangle(Brushes.White, adjustedRect)
e.Graphics.DrawImage(pageImage, adjustedRect)
currentPageIndex += 1
e.HasMorePages = (currentPageIndex < streams.Count)
e.Graphics.DrawRectangle(Pens.Red, adjustedRect)
End Sub
AddHandler printDocument.EndPrint,
Sub(Sender, e)
If streams IsNot Nothing Then
For Each stream As Stream In streams
stream.Close()
Next
streams = Nothing
End If
End Sub
printDocument.PrintController = New StandardPrintController()
printDocument.PrinterSettings.PrinterName = printerName
printDocument.Print()
End If
End Sub
End Module
以硬拷贝形式输出结果
结果输出为pdf格式
我的解决方案更改了下面的代码
来自
e.Graphics.DrawRectangle(Pens.Red, adjustedRect)
至
e.Graphics.DrawRectangle(Pens.White, adjustedRect)