Graphic.DrawString はクメール語 Unicode を適切にレンダリングしないため、(System.Drawing.Printing.PrintDocument) の代わりに WinAPI を使用して印刷ドキュメントを準備しようとしています。TextRendering.DrawText のみが正しくレンダリングされます。Graphic は GDI+ ラッパーであり、TextRendering.DrawText は GDI を使用していると思います。さらに、PrintDocument は TextRendering.DrawText では機能しません。
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _
(ByVal lpDriverName As String, ByVal lpDeviceName As String, _
ByVal lpOutput As String, ByVal lpInitData As DEVMODE) As Long
Private Declare Function EndDoc Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (ByVal hdc As Long, ByVal lpdi As DOCINFO) As Long
Private Declare Function StartPage Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPage Lib "gdi32" (ByVal hdc As Long) As Long
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'' Getting Printer hDC
Dim printHandler As Long = CreateDC(Nothing, "Send To OneNote 2010", Nothing, Nothing)
Dim docInfo As New DOCINFO
docInfo.cbSize = Len(docInfo)
docInfo.lpszDatatype = Nothing
docInfo.lpszOutput = Nothing
docInfo.lpszDocName = "Testing"
StartDoc(printHandler, docInfo)
StartPage(printHandler)
Dim g As Graphics = Graphics.FromHdc(printHandler)
TextRenderer.DrawText(g, "Hello World", Me.Font, New Point(10, 10), Color.Black)
EndPage(printHandler)
EndDoc(printHandler)
End Sub
これが私の試みです。次のコード行で失敗します: Dim g As Graphics = Graphics.FromHdc(printHandler)
. Long は 64 ビット、IntPtr は 32 ビットのようです。
これに対する回避策はありますか?