About 2011年05月

2011年05月にブログ「sanryuブログ」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2011年04月です。

次のアーカイブは2011年06月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35

« 2011年04月 | メイン | 2011年06月 »

2011年05月 アーカイブ

2011年05月18日

[VB.NET]A1用紙が印刷できない。

[環境]
環境 :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は使用したくなかったので印刷できたよかった。

2011年09月
Sun Mon Tue Wed Thu Fri Sat
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30