Autor YouCode - http://www.youcode.com.ar/visual-basic-net/configurar-tamano-de-papel--hoja-personalizada-en-crystal-report-237
La mayoría de la veces, cuando se crea un reporte, con un tamaño de hoja personalizado, éste se configura correctamente al momento de diseñarlo, pero existen ocasiones, en que por más que dibujemos todo a la perfección, en el rato de la verdad, la hoja toma otro tamaño, siendo imposible imprimir.
Hay que entender que Crystal Report toma la configuración de la impresora predeterminada al momento de mostrar un reporte o imprimirlo, pero algunas veces hace falta más que tener la impresora a punto para que el reporte funcione correctamente.Aquí se deben tener en cuenta dos cosas: Primero, tener a la mano el nombre de la impresora; ésto es importante porque ya no vamos a usar la impresora predeterminada, se tiene que utilizar un nombre fijo, por lo que si no pueden saberlo por ustedes mismos, deben crear la opción en dónde se deberá obtener de alguna manera el nombre de la impresora.
Segundo, tener también a la mano el nombre del papel personalizado; ésto debe ser más sencillo de obtener, puesto que bajo ese tipo de hoja fue creado el reporte, pero si no lo tienen, deberán obtenerlo de alguna manera.
Ahora viene el código.
Private Sub Configurar_Hoja_CrystalReport() 'Se obtiene el informe a configurar Dim rdInforme As New rptInforme 'Obtener nombre de impresora Dim print_name As String = "Impresora" 'Obtener nombre de hoja personalizada Dim print_paper As String = "HojaPersonalizada" 'Opciones del Crystal Report Dim repOptions As CrystalDecisions.CrystalReports.Engine.PrintOptions 'Se aplican al informe With rdInforme 'Se obtienen la opciones de impresion repOptions = .PrintOptions 'Se setean las opciones With repOptions 'Obtiene el id del papel --> utiliza una función especial .PaperSize = GetPapersizeID(print_name, print_paper) 'Señala la impresora a utilizar .PrinterName = print_name End With End With End SubPara que funcione este procedimiento, se debe utilizar la siguiente función.
Public Function GetPapersizeID(ByVal PrinterName As String, ByVal PaperSizeName As String) As Integer Dim pdprint As New System.Drawing.Printing.PrintDocument() Dim PaperSizeID As Integer = 0 Dim ppname As String = "" pdprint.PrinterSettings.PrinterName = PrinterName For i As Integer = 0 To pdprint.PrinterSettings.PaperSizes.Count - 1 Dim rawKind As Integer ppname = PaperSizeName If pdprint.PrinterSettings.PaperSizes(i).PaperName = ppname Then rawKind = CInt(pdprint.PrinterSettings.PaperSizes(i).RawKind) PaperSizeID = rawKind Exit For End If Next Return PaperSizeID End FunctionDe esta manera, el reporte funciona perfectamente.
Esta opción está probada en Visual Studio 2008 Professional
http://www.youcode.com.ar/visual-basic-net/configurar-tamano-de-papel--hoja-personalizada-en-crystal-report-237