- - PR -
LocalReportの用紙サイズ設定について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-11-21 21:52
こんばんは、zakuです。
.Net VB 2005を使用して帳票印刷を行っています。 A5縦で印刷したいのですが、レポートのPageSizeを「14.8cm, 21cm」のように 設定してもA4で印刷されてしまいます。 用紙サイズはどこで設定すればよいのでしょうか? 印刷処理は、以下のようなクラスを作成して、 Printメソッドから行っています。 Public Class ClassPrint Implements IDisposable Private m_currentPageIndex As Integer Private m_streams As IList(Of Stream) Public Function Print(ByVal report As LocalReport, ByVal printname As String) As Boolean Export(report) m_currentPageIndex = 0 Return DoPrint(printname) End Function Private Sub Export(ByVal report As LocalReport) Dim deviceInfo As String = _ "<DeviceInfo>" + _ " <OutputFormat>EMF</OutputFormat>" + _ "</DeviceInfo>" Dim warnings() As Warning = Nothing m_streams = New List(Of Stream)() report.Render("Image", deviceInfo, AddressOf CreateStream, warnings) Dim stream As Stream For Each stream In m_streams stream.Position = 0 Next End Sub 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 FileStream("./" + _ name + "." + fileNameExtension, FileMode.Create) m_streams.Add(stream) Return stream End Function Private Function DoPrint(ByVal printerName As String) As Boolean If m_streams Is Nothing Or m_streams.Count = 0 Then Return False End If Dim printDoc As New PrintDocument() printDoc.PrinterSettings.PrinterName = printerName If Not printDoc.PrinterSettings.IsValid Then Dim msg As String = String.Format("Can't find printer""{0}"".", printerName) Console.WriteLine(msg) Return False End If AddHandler printDoc.PrintPage, AddressOf PrintPage printDoc.Print() Return True End Function Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs) Dim pageImage As New Metafile(m_streams(m_currentPageIndex)) ev.Graphics.DrawImage(pageImage, ev.PageBounds) m_currentPageIndex += 1 ev.HasMorePages = (m_currentPageIndex < m_streams.Count) End Sub Public Overloads Sub Dispose() Implements IDisposable.Dispose If Not (m_streams Is Nothing) Then Dim stream As Stream For Each stream In m_streams stream.Close() Next m_streams = Nothing End If End Sub End Class よろしくお願いします。 |
|
投稿日時: 2008-11-23 00:20
過去ログに同じようなトピックがありました。
ちょっと古いですが^^; http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16795&forum=7 これを試してはどうでしょうか? _________________ Nakamura Blog |
|
投稿日時: 2008-11-23 13:06
教えていただいた過去ログを参考にして、
用紙サイズをセットすることができました。 Public Function Print(ByVal report As LocalReport, _ ByVal printname As String, _ Optional ByVal paperSize As String = "A4", _ Optional ByVal documentName As String = "") As Boolean 'レポートエクスポート Export(report) m_currentPageIndex = 0 Dim prs As PrinterSettings Dim pps As PaperSize prs = New PrinterSettings prs.PrinterName = printname For Each pps In prs.PaperSizes If pps.PaperName.IndexOf(paperSize) > -1 Then prs.DefaultPageSettings.PaperSize = pps Exit For End If Next '直接印刷 Return DoPrint(prs) 後はメモリに展開するImageの用紙サイズを変更できれば、 いけそうです。 ありがとうございました。 |
1