La Web del Programador: Comunidad de Programadores
 
    Pregunta:  26182 - COMO JUSTIFICAR TEXTO EN REPORTE
Autor:  Joel Lozano
He generado un reporte en datareport en el que tengo en la seccion cabecera un label que recibe en tiempo de ejecucion parametros desde codigo de un formulario. En realidad envio unas dies lineas de para que me los presente en el reporte, los envia bien pero quisiera que los justificara como lo hace word. rptLabel tiene 3 propiedades para justificar texto ala (derecha,izquierda y centro) pero no justificar.
En definitiva no quiero que me quede asi FEO==> como este texto en el margen derecho.
!!Puede ser cualquiera herramienta!!

gracias compañeros...

  Respuesta:  Angel Pacheco Gutiérrez
Yo no uso reporteador alguno, por que unos son demasiado para mis requerimientos, y otros escasos, así que tengo varias sub y function para el manejo de mi salida impresa. Ví tu solicitud y como no hay objeción tuya respecto a la forma, he aquí el código que yo utilizo para justificar que desde luego, puedes mejorar. Espero sea de utilidad:

Public Sub ImpJust(Texto, margenIzq_, margenDer_)
'Imprime el texto con justificación completa
'dentro de los márgenes indicados.
'El programa que hace el llamado debe seleccionar el
'tipo y tamaño de la fuente.
'Ejemplo de llamado: ImpJust(miCadena,5000,9000)
'miCadena contiene el texto a justificar
'Solo hay una restricción: está hecho pensando en TWIPS

Dim i As Long
Dim tope, ancho As Long
Dim palabra() As String
Dim Terminar As Boolean
Dim anchoCadena As Long
Dim IniciarEn As Integer
Dim LaPalabra As String
Dim cadena As String
Dim j, k, n As Integer
Dim espacioS, incremento As Long

Terminar = False
IniciarEn = 1
Do While Not Terminar And Len(Texto) > 0
IniciarEn = InStr(Texto, " ")
If IniciarEn > 1 Then
LaPalabra = Left(Texto, IniciarEn - 1)
i = i + 1
ReDim Preserve palabra(i)
palabra(i) = LaPalabra
Texto = Right(Texto, Len(Texto) - IniciarEn)
Else
If IniciarEn = 0 Then
i = i + 1
ReDim Preserve palabra(i)
palabra(i) = Trim(Texto)
Terminar = True
Else
Texto = Right(Texto, Len(Texto) - 1)
End If
End If
Loop
n = UBound(palabra)
j = 0

IniciarEn = 1

ancho = margenDer_ - margenIzq_
cadena = ""
For i = 1 To n
j = j + 1
cadena = cadena & palabra(i) & " "
anchoCadena = Printer.TextWidth(cadena)
k = Len(cadena)
If anchoCadena > ancho Then
'Quitar la última palabra de la cadena, incluídos los espacios
cadena = Left(cadena, Len(cadena) - (Len(palabra(i)) + 2))
k = Len(cadena)
anchoCadena = Printer.TextWidth(cadena)
espacioS = ancho - anchoCadena
'Calcular el no. de espacios entre palabras
j = j - 2
'Calcular espacio en palabras
incremento = espacioS / j

cadena = ""
'Regresar una palabra
i = i - 1
'Iniciar contador de palabras
j = 1
'=========================
'Imprimir la linea
'=========================
Printer.CurrentX = margenIzq_
For k = IniciarEn To i
If k <> i Then
cadena = cadena & palabra(k) & " "
Else
cadena = cadena & palabra(k)
End If
Printer.Print palabra(k);
If k <> i Then
Printer.Print " ";
End If
Printer.CurrentX = Printer.CurrentX + incremento
j = j + 1
Next
Printer.CurrentY = Printer.CurrentY+(Printer.TextHeight(cadena) * 1.1)
'Determinar la palabra que inicia la siguiente linea
cadena = ""
j = 0
IniciarEn = i + 1
End If
Next
If cadena <> "" Then
Printer.CurrentX = margenIzq_
Printer.Print cadena;
End If
End Sub