Visual Basic.NET - Dudas sobre impresión de un richtextbox

 
Vista:
sin imagen de perfil
Val: 76
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Dudas sobre impresión de un richtextbox

Publicado por María Inés (49 intervenciones) el 15/06/2018 22:17:20
Buenas a todos nuevamente!! Hace unos días hice una consulta y un usuario muy amable de esta página (Wilfredo) me aconsejó que cambie de idea respecto a completar una plantilla en word para posteriormente imprimirla (a través del uso de marcadores) porque podía tener problemas con el tema de las versiones de Word. Como su aporte fue muy acertado le he hecho caso.

Ahora tengo unas dudas para "reproducir" mi plantilla de Word en Visual (2017).

Les cuento qué he hecho. Como necesito que el texto pueda editarse una vez generado es que he usado un Richtextbox, porque leí por ahí que los reportes son estáticos. También leí que este objeto no se puede imprimir entonces leí que una solución posible era con una extensión de sus propiedades que he bajado de la web (creo que me expresé bien, pero por las dudas aclaro, es un richtextbox que se le han añadido ciertas funciones como imprimir y justificar texto).
Lo que quiero imprimir lo genero pasando datos de un formulario que tiene campos que pueden o no estar completos, si lo están, se ingresa los títulos con su fuente y el texto de los campos en otra fuente e imágenes, con su respectiva alineación.
Todo esto me funciona de maravilla. He logrado imprimir el texto como quiero, con imágenes en el lugar que quiero y todo dentro de los márgenes que pongo.

Tengo un par de dudas que no pude solucionar en mi búsqueda así que se las paso a enumerar:

1) Quisiera poder añadir el número de página en el margen superior derecho, que no debe ser difícil pero no me doy cuenta dónde tengo que poner el contador y cómo visualizar la variable en el richtextbox.
2) Quiero agregar un pie de página y tampoco me doy cuenta cómo puedo hacerlo. Necesito que tenga imágenes y texto este pie de página y que se imprima en todas las hojas lógicamente. Pensé con otro richtextbox? Pero no me doy cuenta cómo asignarlo a la impresión a los dos, al que ya tengo más este otro.
3) Quisiera si es posible que automáticamente el programa las páginas impares me invierta los márgenes y el número de página del lado izquierdo, para permitirme imprimir a doble faz.
4) Quisiera que mi PageSetupDialog se abriese con unos valores por defecto (se abre mostrando página A4 y márgenes en 10 mm, quisiera que por defecto se me abriera con otros márgenes, pero no encuentro el código para indicarle esto)
5) Necesitaría poder poner por código un título en negrita y cursiva. He visto que la manera era asignarle a la selección que hice del texto que ya le aplico un formato de fuente, tomar esa como fuente y aplicarle el otro estilo pero no me ha dado resultado. Algo como Richtextbox.Font = New Font(Richtextbox.Font, Font.Style.Bold) y la fuente original era una fuente cualquiera en Italic asignada mediante el Richtextbox.SelectedFont dado que es un texto que busco y selecciono para poder cambiarle únicamente a él el formato (es un título). Pues no me dio resultado.

De todas estas dudas la más importante es el número de página y el pie de página. Las otras si no se pueden hacer, puedo prescindir. Sé que me he puesto un tanto ambiciosa con mis pretensiones.

Les pongo el código que uso para imprimir a continuación (empleo un PrintPreviewDialog, PrintDocument, PrintDialog, PageSetupDialog):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dim PAGINAS As Integer
Private Sub BTN_Configpag_Click(sender As System.Object, e As System.EventArgs) Handles BTN_Configpag.Click
    PageSetupDialog1.Document = PrintDocument1
    PageSetupDialog1.ShowDialog()
End Sub
 
Private Sub BTN_Vistaprevia_Click(sender As System.Object, e As System.EventArgs) Handles BTN_Vistaprevia.Click
    PrintPreviewDialog1.Document = PrintDocument1
    PrintPreviewDialog1.ShowDialog()
End Sub
 
Private Sub BTN_Imprimir_Click(sender As System.Object, e As System.EventArgs) Handles BTN_Imprimir.Click
    PrintDialog1.Document = PrintDocument1
    If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        PrintDocument1.Print()
    End If
End Sub
 
Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
    PAGINAS = 0
End Sub
 
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    PAGINAS = RTB_Impindic.Print(PAGINAS, RTB_Impindic.TextLength, e)
    If PAGINAS < RTB_Impindic.TextLength Then
        e.HasMorePages = True
    Else
        e.HasMorePages = False
    End If
End Sub


Y aquí el código que uso para cambiarle la fuente al texto título que inserto (yo le paso como parámetro lo que quiero cambiar):

1
2
3
4
Public Sub Titulo(ByVal Titulo As String)
    RTB_Impindic.Find(Titulo, RichTextBoxFinds.WholeWord And RichTextBoxFinds.MatchCase)
    RTB_Impindic.SelectionFont = New Font("Consolas", 14, FontStyle.Bold)
End Sub

Añadiéndole RTB_Impindic.Font = New Font(RTB_Impindic.Font, FontStyle.Italic) es que no me resultó (es la manera que vi de resolverlo, igual esto no tiene tanta importancia, pero quisiera aprender)


Desde ya muchas gracias por su tiempo, he buscado bastante cómo resolver estas inquietudes pero no he dado con la respuesta es por eso que les pregunto.

Un saludo!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 76
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Dudas sobre impresión de un richtextbox

Publicado por María Inés (49 intervenciones) el 16/06/2018 00:24:21
Buenas! He resuelto el tema de la paginación (que me muestre el número de página, ahora debiera ver esto de invertirlos en las pares para la impresión a doble cara).

Les dejo el código por si alguien le interesa.
Añadí esto en el evento PrintPage del PrintDocument:

1
2
3
4
5
6
7
PAGINAS += 1 'AUMENTA EL NUMERO DE PAGINAS POR CADA PAGINA IMPRESA
 
'DEFINE LA FUENTE QUE SE UTILIZARA PARA TODO EL TEXTO
Dim FUENTE As New Font(RTB_Impindic.Font.FontFamily, RTB_Impindic.Font.Size, RTB_Impindic.Font.Style, GraphicsUnit.Point)
Dim MIX As Integer = (e.MarginBounds.Right + e.PageBounds.Right) \ 2 'COORDENADA X PARA EL NUMERO DE PAGINA
Dim MIY As Integer = (e.MarginBounds.Top + e.PageBounds.Top) \ 2 'COORDENADA Y PARA EL NUMERO DE PAGINA
e.Graphics.DrawString(PAGINAS.ToString, FUENTE, MICOLOR, MIX, MIY) 'ESCRIBE EL NUMERO DE PAGINA


(Olvidé avisar que en el Load del Form defino: MICOLOR = New SolidBrush(RTB_Impindic.ForeColor) y luego, fuera del evento PrintPage coloco Dim MICOLOR As SolidBrush)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 76
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Dudas sobre impresión de un richtextbox

Publicado por María Inés (49 intervenciones) el 16/06/2018 05:38:19
He resuelto el pie de página con el e.Graphics.DrawString y .DrawImage, y variables en los espacios que requerían edición (el texto).

Dejo aquí el código que emplee por si alguien tiene un problema semejante.

Para las imágenes:
1
2
3
4
Dim MIXP As Integer = (e.MarginBounds.Left + 100) 'COORDENADA X PARA EL PIE DE PAGINA aquí reemplazar por la ubicación en eje X que se requiera, en mi caso era desde el margen izquierdo + 100
Dim MIYP As Integer = (e.MarginBounds.Bottom) 'COORDENADA Y PARA EL PIE DE PAGINA queda a nivel del margen inferior
Dim newImage As Image = Image.FromFile("C:\Imagenes\Piedepagina.png")
e.Graphics.DrawImage(newImage, MIXP, MIYP)

Para el texto, exactamente lo mismo que con la página que puse en el comentario anterior.

Me resta ver cómo poner "si la página es impar" dar vuelta los márgenes y la ubicación del número de página, que todavía no he resuelto cómo. Si a alguien se le ocurre le agradecería enormemente.

También sigo sin saber cómo poner negrita y cursiva, dado que lo que circula por la web no me dio resultado (quizá lo implementé mal, en el texto que inició esta pregunta puse cómo hice)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar