[環境]
環境 :VB.NET 2005
プリンタ:A1が印刷できるプリンタ(プロッタ)
[現象]
下記でA1用紙を印刷すると、用紙の設定が反映されずディフォルトの用紙(今回はA4)で印刷される。
(1)PrintDocumentのPaperSizesからPaperSizeを取得
(2)PrintDocumentのDefaultPageSettings.PaperSizeに(1)で取得したPaperSizeを設定
(3)PrintDocument.Printで印刷
[原因]
多分、用紙サイズが"A1"以上場合は、カスタム用紙となる為、
PrintDocumentのPaperSizesから取得したPaperSizeを設定しても用紙の設定が反映されない。
[対応]
PaperSize クラスでカスタム用紙の設定をするを参考に用紙サイズを設定したが、印刷できなかった。
プラスで正しいPaperSize.RawKindを設定することで印刷できた。
'''''' 印刷サイズの取得 ''' ''' '''''' Private Function GetPrintingSizeFromPapaerName(ByVal paperName As String) As System.Drawing.Printing.PaperSize ’戻り値 Dim result As System.Drawing.Printing.PaperSize = Nothing 'PaperSizesから用紙を取得 For Each ps As System.Drawing.Printing.PaperSize In _tiffDoc.PrinterSettings.PaperSizes Dim psPaperName As String = ps.PaperName.Substring(0, 2) If paperName.Equals("A0") = True Then 'A0はカスタム用紙のインスタンスを生成 result = CreateA0PaperSize(ps.PaperName) ElseIf paperName.Equals("A1") = True Then 'A1はカスタム用紙のインスタンスを生成 result = CreateA1PaperSize(ps.PaperName) ElseIf psPaperName.Equals(paperName) = True Then 'PrintDocumentのPaperSizesから取得 result = ps Exit For End If Next ps Return result End Function
A0用紙のPaperSizeインスタンスを生成するメソッド。
'''''' A0用紙のPaperSizeインスタンスの生成 ''' ''' カスタム用紙名 '''''' Private Function CreateA0PaperSize(ByVal customPaperName As String) As System.Drawing.Printing.PaperSize 'name , width ,height Dim ps As New System.Drawing.Printing.PaperSize(customPaperName, 3311, 4681) ps.RawKind = 119 'A0のRowKind PageSetupDialogで調べた結果 Return ps End Function
A1用紙のPaperSizeインスタンスを生成するメソッド。
'''''' A1用紙のPaperSizeインスタンスの生成 ''' ''' カスタム用紙名 '''''' Private Function CreateA1PaperSize(ByVal customPaperName As String) As System.Drawing.Printing.PaperSize 'name , width ,height Dim ps As New System.Drawing.Printing.PaperSize(customPaperName, 2339, 3311) ps.RawKind = 120 'A1のRowKind PageSetupDialogで調べた結果 Return ps End Function
APIは使用したくなかったので印刷できたよかった。