以编程方式为Crystal Report设置自定义纸张大小

时间:2013-07-24 13:18:14

标签: vb.net crystal-reports-xi page-size

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

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

这是我用来打印的代码:

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尺寸,Crystal报表预览在尺寸预览中显示自定义纸张?有没有更好的方法来实现我的目标?

2 个答案:

答案 0 :(得分:2)

此方法适用于 Epson LX-300 + ii点阵打印机及更高版本

如果您使用的是打印机,尤其是打印收据 以下是如何将打印机设置为所需纸张尺寸的步骤

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

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)

答案 1 :(得分:0)

您可以这样做

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);
相关问题