About

2011年05月18日 18:47に投稿されたエントリーのページです。

ひとつ前の投稿は「[SPREAD]シート初期状態でコピー、切り取り、貼り付けショートカットキー動作」です。

次の投稿は「[SPREAD]HyperLinkCellTypeのリンクが表示できない。」です。

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

Powered by
Movable Type 3.35

« [SPREAD]シート初期状態でコピー、切り取り、貼り付けショートカットキー動作 | メイン | [SPREAD]HyperLinkCellTypeのリンクが表示できない。 »

[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年08月
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 31