You can use the BitBlt API to copy the Image of the MDI Form's Client Area to a Hidden Picturebox on the MDIForm, then Print it, i.e.
Code:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Private Sub Command1_Click()
Dim W As Long, H As Long, lDC As Long
'Make the Picturebox as big as the MDIForm's Client Area
MDIForm1.Picture1.Move 0, 0, MDIForm1.ScaleWidth, MDIForm1.ScaleHeight
'Make sure the Image we draw is persistent
MDIForm1.Picture1.AutoRedraw = True
'Get the MDI Client Area Dimensions in Pixels
W = MDIForm1.ScaleWidth / Screen.TwipsPerPixelX
H = MDIForm1.ScaleHeight / Screen.TwipsPerPixelY
'Get a Device Context for the MDI Client Area
lDC = GetDC(MDIForm1.hwnd)
'Copy an Image of the MDI Client Area and Everything in it to the Picturebox
BitBlt MDIForm1.Picture1.hdc, 0, 0, W, H, lDC, 0, 0, SRCCOPY
'Release the Device Context
Call ReleaseDC(MDIForm1.hwnd, lDC)
'Make the Image Persistent
MDIForm1.Picture1 = MDIForm1.Picture1.Image
'Print the Image
Printer.PaintPicture MDIForm1.Picture1, 0, 0
Printer.EndDoc
End Sub