6.プリンターの印刷余白及び用紙サイズを取得 |
1.プリンターの印刷余白及び用紙サイズを取得 2.上記実行結果及び留意事項 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:GetDeviceCaps その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.プリンターの印刷余白及び用紙サイズを取得(200) 2002.09.02 |
Option Explicit 'ディバイスに関する情報を取得する(908) Private Declare Function GetDeviceCaps Lib "gdi32" _ (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Const HORZRES = 8 '実際のスクリーンの幅(実印刷領域) Private Const VERTRES = 10 '実際のスクリーンの高さ Private Const PHYSICALWIDTH = 110 '物理的幅(実用紙サイズ) Private Const PHYSICALHEIGHT = 111 '物理的高さ Private Const PHYSICALOFFSETX = 112 '印刷可能な左方向のマージン Private Const PHYSICALOFFSETY = 113 '印刷可能な上方向のマージン Private Sub Command1_Click() Dim LeftMargin As Long, TopMargin As Long Dim RightMargin As Long, BottomMargin As Long Dim PhysHeight As Long, PhysWidth As Long With Printer 'マージンをピクセル単位で取得しそれをmmに変換 LeftMargin = .ScaleX(GetDeviceCaps(.hdc, PHYSICALOFFSETX), _ vbPixels, vbMillimeters) TopMargin = .ScaleY(GetDeviceCaps(.hdc, PHYSICALOFFSETY), _ vbPixels, vbMillimeters) PhysWidth = .ScaleX(GetDeviceCaps(.hdc, PHYSICALWIDTH), _ vbPixels, vbMillimeters) PhysHeight = .ScaleY(GetDeviceCaps(.hdc, PHYSICALHEIGHT), _ vbPixels, vbMillimeters) '用紙サイズから印刷可能領域を差引きマージンを求める RightMargin = PhysWidth - (.ScaleX(GetDeviceCaps(.hdc, HORZRES), _ vbPixels, vbMillimeters) + LeftMargin) BottomMargin = PhysHeight - (.ScaleY(GetDeviceCaps(.hdc, VERTRES), _ vbPixels, vbMillimeters) + TopMargin) End With Label1.Caption = "プリンター用紙印刷余白(左) : " & LeftMargin & " mm" Label2.Caption = "プリンター用紙印刷余白(上) : " & TopMargin & " mm" Label3.Caption = "プリンター用紙印刷余白(右) : " & RightMargin & " mm" Label4.Caption = "プリンター用紙印刷余白(下) : " & BottomMargin & " mm" Label5.Caption = "プリンター用紙サイズ(幅) : " & PhysWidth & " mm" Label6.Caption = "プリンター用紙サイズ(高さ) : " & PhysHeight & " mm" End Sub |
2.上記実行結果及び留意事項 |
プリンターにより、印刷開始位置が違うので位置を揃える必要があるような場合、あらかじめ開始位置(余白)を取得して、その分を考慮しておくとプリンターによる印刷位置のずれが防止できます。 当初APIのリファレンスにPHYSICALOFFSETX は X方向のマージン と書かれていたので、左右のマージン(左マージン と 右マージン)が同じと勘違いしておりました。 Starfish さんに教えて頂き、機種により違う事を知り、下余白・右余白もそれぞれ取得するように変更しました。 MSDNにHPにも掲載されていました。 [SDK32] プリントマージンを計算するプログラムの使用方法 [Howto]: プログラムを使用して、印刷の余白を計算する方法 [HOWTO] GetDeviceCaps を使用して用紙の余白を設定する方法 今では、検索すると色々と情報が公開されているようですが、リンク等がよく切れるので、切れている場合は、上記語句をキーワードにして検索して見て下さい。 又、公開されている内にご自分のパソコン内にでも取り込んでおいて下さい。 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
プリンターの印刷開始位置 用紙に対するプリンターの印刷開始位置 Visual Basic の Printer オブジェクトで取得できる情報は、印刷する用紙の物理的なサイズと印刷可能領域のみで、余白や印刷できない領域の情報にはアクセスできません。ただし、Win32 API 関数の GetDeviceCaps を使用することにより、これらの情報を取得できます。 |