DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PrintDocumentの文字間隔について

環境/言語:[WindowsXP/VB2005]
分類:[.NET]

VB2005でPrintDocumentを利用して印刷しようとしているのですが、文字間隔を狭めたり、広げたりすることはできないでしょうか?
できるようであれば、コード例もご教示いただければ助かります。
よろしくお願いいたします。
■No28105に返信(h-sekiさんの記事)
> VB2005でPrintDocumentを利用して印刷しようとしているのですが、

PrintDocument への描画処理は、現在どのようにして行っているのでしょうか。
TextRenderer は印刷に非対応なので、やはり Graphics.DrawText メソッド?
あるいは Visual Studio International Feature Pack の DrawJapaneseString ?
それとも、PrintDocument を利用する帳票ツール等を利用しているとか?


> 文字間隔を狭めたり、広げたりすることはできないでしょうか?

行間については、行単位に分断しながらの描画になりますが、
http://dobon.net/vb/dotnet/graphics/printtext.html
の GetHeight による y 座標指定 の部分を調整すればいけると思います。
文字間隔も同様で、文字単位に分断しながら幅を調整して描画してみてください。


なお『隣の文字によって描画が変わるような状況』においては、単純に
文字単位で分断すると、綺麗に出力されない可能性がありますのでご注意を。

# 「ダイアクリティカルマーク」、「半角カナにおける濁点/半濁点」
# 「複合文字用の半濁点」、あるいは筆記体フォントなど…。

やや難解ですが、以下、追加資料として:
http://blogs.msdn.com/b/dd_jpn/archive/2007/11/02/5829289.aspx
http://msdn.microsoft.com/ja-jp/magazine/ee221436.aspx
■No28106に返信(魔界の仮面弁士さんの記事)
> ■No28105に返信(h-sekiさんの記事)
> PrintDocument への描画処理は、現在どのようにして行っているのでしょうか。
e.Graphics.DrawString("テスト", New Font("MS 明朝", 11), Brushes.Black, 30, 20)
で印字しております。
"テスト"の印字幅を微調整する方法をご教示いただければと考えております。
■No28124に返信(h-sekiさんの記事)

> e.Graphics.DrawString("テスト", New Font("MS 明朝", 11), Brushes.Black, 30, 20)
> で印字しております。
> "テスト"の印字幅を微調整する方法をご教示いただければと考えております。

魔界の仮面弁士さんが書いている通りなのですが、

e.Graphics.DrawString("テ", New Font("MS 明朝", 11), Brushes.Black, 30, 20)
e.Graphics.DrawString("ス", New Font("MS 明朝", 11), Brushes.Black, 80, 20)
e.Graphics.DrawString("ト", New Font("MS 明朝", 11), Brushes.Black, 130, 20)

みたいな感じです。後は文字列を分割したり、座標の指定にループを使用するといいかと思います。
■No28126に返信(shuさんの記事)
> e.Graphics.DrawString("テ", New Font("MS 明朝", 11), Brushes.Black, 30, 20)
> e.Graphics.DrawString("ス", New Font("MS 明朝", 11), Brushes.Black, 80, 20)
> e.Graphics.DrawString("ト", New Font("MS 明朝", 11), Brushes.Black, 130, 20)

Font は IDisposable なので、Using ブロックにした方が良いかも。
■No28130に返信(魔界の仮面弁士さんの記事)
> ■No28126に返信(shuさんの記事)
>>e.Graphics.DrawString("テ", New Font("MS 明朝", 11), Brushes.Black, 30, 20)
>>e.Graphics.DrawString("ス", New Font("MS 明朝", 11), Brushes.Black, 80, 20)
>>e.Graphics.DrawString("ト", New Font("MS 明朝", 11), Brushes.Black, 130, 20)
>
> Font は IDisposable なので、Using ブロックにした方が良いかも。
ごもっともです。

印刷中よく使うフォントなら以下のようにBeginPrintで作成、PrintPageで使用、EndPrintで破棄もいいかも。

private m_fntM11 as font = Nothing

Private Sub m_prn_BeginPrint(〜) Handles m_prn.BeginPrint
if m_fntM11 is nothing then
m_fntM11 = New Font("MS 明朝", 11)
end if
End Sub

Private Sub m_prn_EndPrint(〜) Handles m_prn.EndPrint
if m_fntM11 IsNot Nothing then
m_fntM11.Dispose
m_fntM11 = Nothing
end if
End Sub

Private Sub m_prn_PrintPage(〜) Handles m_prn.PrintPage
・・・

e.Graphics.DrawString("テ", m_fntM11, Brushes.Black, 30, 20)
e.Graphics.DrawString("ス", m_fntM11, Brushes.Black, 80, 20)
e.Graphics.DrawString("ト", m_fntM11, Brushes.Black, 130, 20)

・・・
End Sub
魔界の仮面弁士さん、shuさんアドバイスいただきありがとうございました。
おかげさまで解決しました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板