Vb.net 以编程方式设置Crystal报表的自定义图纸尺寸

Vb.net 以编程方式设置Crystal报表的自定义图纸尺寸,vb.net,crystal-reports-xi,page-size,Vb.net,Crystal Reports Xi,Page Size,我已经在Setting-Printers-File-Server Properties中创建了自定义纸张大小“SUPP 15 x 14”。现在,我正在尝试使用VB.net 2005为Crystal Report设置自定义纸张大小 当我从VB.net运行报告时,Crystal report viewer会显示自定义纸张大小的正确预览,但当我发出打印命令时,它会以默认打印机纸张大小打印。(例如信件) 下面是我用来打印的代码: Public Sub ... '... Dim ObjCr

我已经在
Setting-Printers-File-Server Properties中创建了自定义纸张大小“SUPP 15 x 14”。
现在,我正在尝试使用VB.net 2005为Crystal Report设置自定义纸张大小

当我从VB.net运行报告时,Crystal report viewer会显示自定义纸张大小的正确预览,但当我发出打印命令时,它会以默认打印机纸张大小打印。(例如信件)

下面是我用来打印的代码:

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
类中


上面的代码有什么问题?为什么在Crystal report preview在大小预览中显示自定义纸张的情况下打印字母大小?有更好的方法来实现我的目标吗?

此方法适用于爱普生LX-300+ii点阵式打印机以及更高型号的打印机

如果您使用打印机,特别是打印收据 以下是有关如何将打印机设置为所需纸张大小的步骤

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

然后按右键单击设置打印机,然后设置为默认打印机

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

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)

此方法适用于爱普生LX-300+ii点阵打印机及更高型号

如果您使用打印机,特别是打印收据 以下是有关如何将打印机设置为所需纸张大小的步骤

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

然后按右键单击设置打印机,然后设置为默认打印机

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

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)
你可以这样做

var rep = new YursCrystalReport();
var printerSettings = new System.Drawing.Printing.PrinterSettings();
var pSettings = new System.Drawing.Printing.PageSettings(printerSettings); 
pSettings.PaperSize = new System.Drawing.Printing.PaperSize("newsize", 3000, 3000);//custom size  hundredths (100=1 inch)
pSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
rep.PrintOptions.DissociatePageSizeAndPrinterPaperSize = true;
rep.PrintOptions.CopyFrom(printerSettings, pSettings);
你可以这样做

var rep = new YursCrystalReport();
var printerSettings = new System.Drawing.Printing.PrinterSettings();
var pSettings = new System.Drawing.Printing.PageSettings(printerSettings); 
pSettings.PaperSize = new System.Drawing.Printing.PaperSize("newsize", 3000, 3000);//custom size  hundredths (100=1 inch)
pSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
rep.PrintOptions.DissociatePageSizeAndPrinterPaperSize = true;
rep.PrintOptions.CopyFrom(printerSettings, pSettings);

没有人有答案吗?我在工作中遇到了完全相同的问题。可能是打印机默认设置为“字母大小”。还是没有答案现在是2016年没有人有答案?我在工作中遇到了完全相同的问题。可能是打印机默认设置为“字母大小”。仍然没有答案现在是2016年