- PR -

LocalReportの用紙サイズ設定について

1
投稿者投稿内容
zaku
常連さん
会議室デビュー日: 2004/04/26
投稿数: 20
投稿日時: 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/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-11-23 00:20
過去ログに同じようなトピックがありました。
ちょっと古いですが^^;

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16795&forum=7

これを試してはどうでしょうか?

_________________
Nakamura Blog
zaku
常連さん
会議室デビュー日: 2004/04/26
投稿数: 20
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)