2013-07-24 38 views
1

我已创建自定义纸张尺寸自定义纸张尺寸“人联党15×14”在Setting - Printers - File - Server Properties.现在我想要使用VB.net 2005编程设置水晶报表

当设置自定义纸张尺寸的水晶报表我从VB.net运行报表,Crystal报表查看器显示自定义纸张尺寸的正确预览,但是当我给出打印命令时,它将使用默认打印机纸张尺寸进行打印。 (如Letter)

下面是我用打印的代码:

Public Sub ... 
    '... 
    Dim ObjCrReport as new ReportDocument 
    '... 
    ObjCrReport.SetDataSource(ObjPrintDataSet.Tables("PrintData")) 
    SetReportPageSize("SUPP 15 x 14", 1) 
    '... 
End Sub 

Private Sub BtnPrintDoc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrintDoc.Click 
    Try 
     'Print command 
     ObjCrReport.PrintToPrinter(1, False, 0, 0) 
    Catch ex As Exception 
     MessageBox.Show(ex.Message, "Alert", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 
End Sub 

Public Sub SetReportPageSize(ByVal mPaperSize As String, ByVal PaperOrientation As Integer) 
    Try 
     Dim ObjPrinterSetting As New System.Drawing.Printing.PrinterSettings 
     Dim PkSize As New System.Drawing.Printing.PaperSize 
     ObjPrinterSetting.PrinterName = "Epson FX1170" 
     For i As Integer = 0 To ObjPrinterSetting.PaperSizes.Count - 1 
      If ObjPrinterSetting.PaperSizes.Item(i).PaperName = mPaperSize.Trim Then 
       PkSize = ObjPrinterSetting.PaperSizes.Item(i) 
       Exit For 
      End If 
     Next 

     If PkSize IsNot Nothing Then 
      Dim myAppPrintOptions As CrystalDecisions.CrystalReports.Engine.PrintOptions = ObjCrReport.PrintOptions 
      myAppPrintOptions.PrinterName = "Epson FX1170" 
      myAppPrintOptions.PaperSize = CType(PkSize.RawKind, CrystalDecisions.Shared.PaperSize) 
      ObjCrReport.PrintOptions.PaperOrientation = IIf(PaperOrientation = 1, _ 
            CrystalDecisions.Shared.PaperOrientation.Portrait, _ 
            CrystalDecisions.Shared.PaperOrientation.Landscape) 
     End If 
     PkSize = Nothing 
    Catch ex As Exception 
     MessageBox.Show(ex.Message, "Alert", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 
End Sub 

如果我使用myAppPrintOptions.PaperSize = PaperSize.PaperLegal,然后点击打印预览&印刷出现正确的,但我要的是设定不显示自定义纸张尺寸在PaperSize类中。

上述代码有什么问题?为什么打印Letter Size时Crystal Report预览会在大小预览中显示自定义纸张?有没有更好的方法来实现我的目标?

+0

没有人有任何答案?我在工作中遇到了完全相同的问题。 –

+0

默认情况下,可能是Printer设置为_“Letter Size”_。现在还没有答案,现在是2016年 –

回答

0

此方法适用于一个爱普生LX-300 + II点阵打印机后来的型号

如果您使用的是打印机尤其是对打印收据 下面是关于如何设置的步骤你使用打印机所需的纸张尺寸

首先设置打印机: 转到设备和打印机 在打印机选择您要使用并单击打印机 - 右键打印机属性 单击首选项...按钮。 Main Tab - 更改文档大小用户定义 将出现一个新的新窗口。 在纸张尺寸名称指定的名称(即或纸) 和改变纸张的宽度和高度根据需要 点击保存然后OK

enter image description here 然后按右键然后设置为默认设置打印机打印机

为您的打印添加这些代码行。您仍然可以使用参数和数据集。

Dim c As Integer 
    Dim doctoprint As New System.Drawing.Printing.PrintDocument() 
    doctoprint.PrinterSettings.PrinterName = "EPSON L1300 Series" 
    Dim rawKind As Integer 
    For c = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1 
     If doctoprint.PrinterSettings.PaperSizes(c).PaperName = "OR Receipts" Then 
      rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(c).GetType().GetField("kind", Reflection.BindingFlags.Instance Or 

Reflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(c))) 
      Exit For 
     End If 
    Next 

    Report1.PrintOptions.PaperSize = CType(rawKind, CrystalDecisions.Shared.PaperSize) 
    frmPreview.CrystalReportViewer1.ReportSource = Report1 
    Report1.PrintToPrinter(1, False, 1, 1)