b="c"\a.jpg" 
Printer.PaintPicture LoadPicture(b), 0, 0 
Printer.EndDoca.jpg本身是A4幅面大小的,不知为何打出来的图像很大,每个字都很大,结果出来了好几页,每页上有一部分。
我想问如何把图像打印到A4幅面上,如果它比A4小,就打印成原大小,如果比A4大,就强制缩成A4大小,请大家帮我。

解决方案 »

  1.   

    但有的打印机不支持zoom**********************************直接使用
    Printer.PaintPicture 方法 
    Visual Studio 2008其他版本 Visual Studio 2010
    更新:2007 年 11 月在页面上打印图像文件的内容。命名空间:  Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
    程序集:  Microsoft.VisualBasic.PowerPacks.Vs(在 Microsoft.VisualBasic.PowerPacks.Vs.dll 中)语法
    --------------------------------------------------------------------------------VBC#C++F#JScript
    复制'声明Public Sub PaintPicture ( _
    picture As Image, _
    x1 As Single, _
    y1 As Single, _
    width1 As Single, _
    height1 As Single, _
    x2 As Single, _
    y2 As Single, _
    width2 As Single, _
    height2 As Single _
    )
    '用法Dim instance As Printer
    Dim picture As Image
    Dim x1 As Single
    Dim y1 As Single
    Dim width1 As Single
    Dim height1 As Single
    Dim x2 As Single
    Dim y2 As Single
    Dim width2 As Single
    Dim height2 As Singleinstance.PaintPicture(picture, x1, y1, _
    width1, height1, x2, y2, width2, height2)
    参数
    picture
    类型:System.Drawing.ImageImage 值,表示要打印的图像。x1
    类型:System.SingleSingle 类型的值,指示此图像的打印位置的水平目标坐标。ScaleMode 属性确定所用的度量单位。y1
    类型:System.SingleSingle 类型的值,指示此图像的打印位置的垂直目标坐标。ScaleMode 属性确定所用的度量单位。width1
    类型:System.Single可选。Single 类型的值,指示图片的目标宽度。对象的 ScaleMode 属性确定所用的度量单位。如果目标宽度大于或小于源宽度,图片将进行拉伸或压缩以适合页面。如果省略此参数,则将使用源宽度。height1
    类型:System.Single可选。Single 类型的值,指示图片的目标高度。对象的 ScaleMode 属性确定所用的度量单位。如果目标高度大于或小于源高度,图片将进行拉伸或压缩以适合页面。如果省略此参数,则将使用源高度。x2
    类型:System.Single可选。Single 类型的值,指示图片中剪裁区域的坐标(x 轴)。对象的 ScaleMode 属性确定所用的度量单位。如果省略,则假定为 0。y2
    类型:System.Single可选。Single 类型的值,指示图片中剪裁区域的坐标(y 轴)。对象的 ScaleMode 属性确定所用的度量单位。如果省略,则假定为 0。width2
    类型:System.Single可选。Single 类型的值,指示图片中剪裁区域的源宽度。对象的 ScaleMode 属性确定所用的度量单位。如果省略此参数,则将使用整个源宽度。height2
    类型:System.Single可选。Single 类型的值,指示图片中剪裁区域的源高度。对象的 ScaleMode 属性确定所用的度量单位。如果省略此参数,则将使用整个源高度。备注
    --------------------------------------------------------------------------------您可以通过对目标高度 (height1) 和/或目标宽度 (width1) 使用负值来水平或垂直翻转图片。可以根据需要省略任意个可选尾部参数。如果省略一个或多个可选尾部参数,请不要在指定的最后一个参数后面使用任何逗号。如果要指定一个可选参数,您必须指定在语法中出现的该参数之前的所有可选参数。说明: 
    Visual Basic 6.0 版本的 Printer 对象包括附加参数 OpCode,该参数用于对位图图像执行位运算。不再支持此参数。
     说明: 
    Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6 命名空间中的函数和对象是提供给用于将 Visual Basic 6.0 升级到 Visual Basic 2008 的工具使用的。在大多数情况下,这些函数和对象重复 .NET Framework 的其他命名空间中的功能。只有 Visual Basic 6.0 代码模型与 .NET Framework 实现有显著区别时才需要这些函数和对象。
     示例
    --------------------------------------------------------------------------------下面的示例演示如何在页面上打印图像、将图像拉伸或收缩至指定大小。该示例假设您已向项目添加了一个名为 Image1 的 Image 资源。VBC#C++F#JScript
    复制Dim pr As New Printer
    pr.PaintPicture(My.Resources.Image1, 500, 500, 1000, 1000)
    pr.EndDoc()
    权限
    --------------------------------------------------------------------------------对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见通过部分受信任的代码使用库。
      

  2.   

    Printer.ScaleMode=...
    Printer.ScaleWidth=...
    Printer.ScaleHeighte=...TwipsPerPixelX、TwipsPerPixelY 属性 
          返回水平 (TwipsPerPixelX) 或垂直 (TwipsPerPixelY) 度量的对象的每一像素中的缇数。语法object.TwipsPerPixelXobject.TwipsPerPixelYobject 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。说明Windows API 例程一般需要以像素为度量单位。使用这些属性能够快速转换度量单位而不用改变对象的 ScaleMode 属性设置值。
      

  3.   

    Printer.Scale
    Printer.ScaleX
    Printer.ScaleY
    都试试吧。
      

  4.   

    Private Sub Command1_Click()
        Printer.ScaleMode = vbTwips 'vbMillimeters
    '    Printer.Zoom = 50
        Printer.PaintPicture LoadPicture("E:\My Documents\My Pictures\2b_01.jpg"), 0, 0, 150, 150   '宽度和高度根据你的需要改
        Printer.EndDocEnd Sub
      

  5.   


    '在模块中写如下代码: 
    '*************************************************************************************************** 
    Public   Type   ImageSize 
          Width   As   Long 
          Height   As   Long 
    End   Type Public   Function   GetImageSize(sFileName   As   String)   As   ImageSize 
          On   Error   Resume   Next 
          Dim   bTemp(3)   As   Byte,   lPos   As   Long,   lFlen   As   Long 
          Open   sFileName   For   Binary   As   #1 
                  lFlen   =   LOF(1) 
                  Get   #1,   1,   bTemp() 
                  
                  If   bTemp(0)   =   &H89   And   bTemp(1)   =   &H50   And   bTemp(2)   =   &H4E   And   bTemp(3)   =   &H47   Or   bTemp(0)   =   &H42   And   bTemp(1)   =   &H4D   Then 
                  Debug.Print   "\PNG   OR   BMP\ " 
                          Get   #1,   19,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                          Get   #1,   23,   bTemp 
                          GetImageSize.Height   =   byte2long(bTemp(0),   bTemp(1)) 
                  End   If 
                  
                  'JPG   
                  If   bTemp(0)   =   &HFF   And   bTemp(1)   =   &HD8   And   bTemp(2)   =   &HFF   Then 
                          Debug.Print   "\JPEG\ " 
                          lPos   =   4 
                          Do 
                                  Do 
                                          Get   #1,   lPos,   bTemp 
                                          lPos   =   lPos   +   1 
                                  Loop   Until   (bTemp(0)   =   &HFF   And   bTemp(1)   <>   &HFF)   Or   lPos   >   lFlen 
                          
                                  Get   #1,   lPos,   bTemp 
                                          
                                  If   bTemp(0)   > =   &HC0   And   bTemp(0)   <=   &HC3   Then 
                                          Get   #1,   lPos   +   4,   bTemp 
                                          Exit   Do 
                                  Else 
                                          lPos   =   lPos   +   (byte2long(bTemp(2),   bTemp(1)))   +   1 
                                  End   If 
                          Loop   While   lPos   <   lFlen 
                          GetImageSize.Width   =   byte2long(bTemp(3),   bTemp(2)) 
                          GetImageSize.Height   =   byte2long(bTemp(1),   bTemp(0)) 
                  End   If               'GIF   file 
                  If   bTemp(0)   =   &H47   And   bTemp(1)   =   &H49   And   bTemp(2)   =   &H46   And   bTemp(3)   =   &H38   Then 
                          Debug.Print   "\GIF\ " 
                          Get   #1,   7,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                          GetImageSize.Height   =   byte2long(bTemp(2),   bTemp(3)) 
                  End   If 
                          
                  'PSD   
                  If   bTemp(0)   =   &H38   And   bTemp(1)   =   &H42   And   bTemp(2)   =   &H50   And   bTemp(3)   =   &H53   Then 
                          Debug.Print   "\PSD\ " 
                          Get   #1,   17,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(1),   bTemp(0)) 
                          Get   #1,   21,   bTemp 
                          GetImageSize.Height   =   byte2long(bTemp(1),   bTemp(0)) 
                  End   If 
                  
                  'TIF   
                  If   bTemp(0)   =   &H4D   And   bTemp(1)   =   &H4D   And   bTemp(2)   =   &H0   And   bTemp(3)   =   &H2A   Then 
                          Debug.Print   "\TIF1\ " 
                          Get   #1,   31,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(1),   bTemp(0)) 
                          Get   #1,   43,   bTemp 
                          GetImageSize.Height   =   byte2long(bTemp(1),   bTemp(0)) 
                  End   If 
                  
                  If   bTemp(0)   =   &H49   And   bTemp(1)   =   &H49   And   bTemp(2)   =   &H2A   And   bTemp(3)   =   &H0   Then 
                          Get   #1,   5,   bTemp 
                          If   bTemp(0)   =   &H8   And   bTemp(1)   =   &H0   And   bTemp(2)   =   &H0   And   bTemp(3)   =   &H0   Then 
                                  'TIF   
                                  Debug.Print   "\TIF2-1\ " 
                                  Get   #1,   31,   bTemp 
                                  GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                                  Get   #1,   43,   bTemp 
                                  GetImageSize.Height   =   byte2long(bTemp(0),   bTemp(1)) 
                          Else 
                                  'TIF   
                                  Debug.Print   "\TIF2-2\ " 
                                  lPos   =   byte2long(bTemp(0),   bTemp(1))   +   byte2long(bTemp(2),   bTemp(3))   *   65536   +   11 
                                  Get   #1,   lPos,   bTemp 
                                  GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                                  Get   #1,   lPos   +   12,   bTemp 
                                  GetImageSize.Height   =   byte2long(bTemp(0),   bTemp(1)) 
                          End   If 
                  End   If       Close   #1 
    End   Function Public   Function   byte2long(ByVal   lsb   As   Long,   ByVal   msb   As   Long)   As   Long   
          byte2long   =   lsb   +   (msb   *   256) 
    End   Function '****************************************************************************************************** 
    '窗口中的代码: 
    Private   Sub   Command1_Click() 
    Dim   a   As   ImageSize 
    a   =   GetImageSize( "D:\2.jpg ") 
    Text1.Text=   a.Height     &   "像素 " 
    Text2.Text   =   a.Width   &   "像素 " 
    End   Sub 
      

  6.   

    '在模块中写如下代码: 
    '*************************************************************************************************** 
    Public   Type   ImageSize 
          Width   As   Long 
          Height   As   Long 
    End   Type Public   Function   GetImageSize(sFileName   As   String)   As   ImageSize 
          On   Error   Resume   Next 
          Dim   bTemp(3)   As   Byte,   lPos   As   Long,   lFlen   As   Long 
          Open   sFileName   For   Binary   As   #1 
                  lFlen   =   LOF(1) 
                  Get   #1,   1,   bTemp() 
                  
                  If   bTemp(0)   =   &H89   And   bTemp(1)   =   &H50   And   bTemp(2)   =   &H4E   And   bTemp(3)   =   &H47   Or   bTemp(0)   =   &H42   And   bTemp(1)   =   &H4D   Then 
                  Debug.Print   "\PNG   OR   BMP\ " 
                          Get   #1,   19,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                          Get   #1,   23,   bTemp 
                          GetImageSize.Height   =   byte2long(bTemp(0),   bTemp(1)) 
                  End   If 
                  
                  'JPG   
                  If   bTemp(0)   =   &HFF   And   bTemp(1)   =   &HD8   And   bTemp(2)   =   &HFF   Then 
                          Debug.Print   "\JPEG\ " 
                          lPos   =   4 
                          Do 
                                  Do 
                                          Get   #1,   lPos,   bTemp 
                                          lPos   =   lPos   +   1 
                                  Loop   Until   (bTemp(0)   =   &HFF   And   bTemp(1)   <>   &HFF)   Or   lPos   >   lFlen 
                          
                                  Get   #1,   lPos,   bTemp 
                                          
                                  If   bTemp(0)   > =   &HC0   And   bTemp(0)   <=   &HC3   Then 
                                          Get   #1,   lPos   +   4,   bTemp 
                                          Exit   Do 
                                  Else 
                                          lPos   =   lPos   +   (byte2long(bTemp(2),   bTemp(1)))   +   1 
                                  End   If 
                          Loop   While   lPos   <   lFlen 
                          GetImageSize.Width   =   byte2long(bTemp(3),   bTemp(2)) 
                          GetImageSize.Height   =   byte2long(bTemp(1),   bTemp(0)) 
                  End   If               'GIF   file 
                  If   bTemp(0)   =   &H47   And   bTemp(1)   =   &H49   And   bTemp(2)   =   &H46   And   bTemp(3)   =   &H38   Then 
                          Debug.Print   "\GIF\ " 
                          Get   #1,   7,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                          GetImageSize.Height   =   byte2long(bTemp(2),   bTemp(3)) 
                  End   If 
                          
                  'PSD   
                  If   bTemp(0)   =   &H38   And   bTemp(1)   =   &H42   And   bTemp(2)   =   &H50   And   bTemp(3)   =   &H53   Then 
                          Debug.Print   "\PSD\ " 
                          Get   #1,   17,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(1),   bTemp(0)) 
                          Get   #1,   21,   bTemp 
                          GetImageSize.Height   =   byte2long(bTemp(1),   bTemp(0)) 
                  End   If 
                  
                  'TIF   
                  If   bTemp(0)   =   &H4D   And   bTemp(1)   =   &H4D   And   bTemp(2)   =   &H0   And   bTemp(3)   =   &H2A   Then 
                          Debug.Print   "\TIF1\ " 
                          Get   #1,   31,   bTemp 
                          GetImageSize.Width   =   byte2long(bTemp(1),   bTemp(0)) 
                          Get   #1,   43,   bTemp 
                          GetImageSize.Height   =   byte2long(bTemp(1),   bTemp(0)) 
                  End   If 
                  
                  If   bTemp(0)   =   &H49   And   bTemp(1)   =   &H49   And   bTemp(2)   =   &H2A   And   bTemp(3)   =   &H0   Then 
                          Get   #1,   5,   bTemp 
                          If   bTemp(0)   =   &H8   And   bTemp(1)   =   &H0   And   bTemp(2)   =   &H0   And   bTemp(3)   =   &H0   Then 
                                  'TIF   
                                  Debug.Print   "\TIF2-1\ " 
                                  Get   #1,   31,   bTemp 
                                  GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                                  Get   #1,   43,   bTemp 
                                  GetImageSize.Height   =   byte2long(bTemp(0),   bTemp(1)) 
                          Else 
                                  'TIF   
                                  Debug.Print   "\TIF2-2\ " 
                                  lPos   =   byte2long(bTemp(0),   bTemp(1))   +   byte2long(bTemp(2),   bTemp(3))   *   65536   +   11 
                                  Get   #1,   lPos,   bTemp 
                                  GetImageSize.Width   =   byte2long(bTemp(0),   bTemp(1)) 
                                  Get   #1,   lPos   +   12,   bTemp 
                                  GetImageSize.Height   =   byte2long(bTemp(0),   bTemp(1)) 
                          End   If 
                  End   If       Close   #1 
    End   Function Public   Function   byte2long(ByVal   lsb   As   Long,   ByVal   msb   As   Long)   As   Long   
          byte2long   =   lsb   +   (msb   *   256) 
    End   Function '****************************************************************************************************** 
    '窗口中的代码: 
    Private   Sub   Command1_Click() 
        Dim   a   As   ImageSize 
        a   =   GetImageSize( "D:\2.jpg ") 
        Text1.Text=   a.Height     &   "像素 " 
        Text2.Text   =   a.Width   &   "像素 " 
    End   Sub 
      

  7.   

    Option ExplicitSub Main()
        Const MARGIN_SIZE = 1 '边距(厘米)'
        Dim pic As IPictureDisp
        
        Set pic = LoadPicture("C:\WINDOWS\Web\Wallpaper\Bliss.bmp")
        
        Printer.PaperSize = vbPRPSA4
        Printer.Orientation = IIf(pic.Height > pic.Width, vbPRORPortrait, vbPRORLandscape)
        Printer.ScaleMode = vbCentimeters
        Printer.PaintPicture pic, MARGIN_SIZE, MARGIN_SIZE, _
                             Printer.ScaleWidth - MARGIN_SIZE * 2, _
                             Printer.ScaleHeight - MARGIN_SIZE * 2
        Printer.EndDoc
    End Sub
      

  8.   

    楼主好好看看PaintPicture 后面的几个参数吧.