C sharp - Imprimir texto con tabulaciones

 
Vista:

Imprimir texto con tabulaciones

Publicado por Carolina (8 intervenciones) el 02/06/2006 23:14:52
Hola a todos.

Tengo el siguiente problema:

Estoy desarrollando una aplicación en la cual creo archivos de texto y los cargo a un RichTextBox para poder verlos, pero también necesito imprimirlos, el texto contiene tabulaciones pero al imprimir no me tiene en cuenta dichas tabulaciones.

Esta es la lógica de impresión, será que es en este punto? o se debe a que el archivo al cargarlo al RichTextBox se carga como un PlainText?.

public class TextPrintDocument : PrintDocument
{

private Font printFont = null;
private StreamReader streamToPrint = null;
private string overflowText = null;

public TextPrintDocument(StreamReader streamToPrint, Font printFont) : base ()
{
this.streamToPrint = streamToPrint ;
this.printFont = printFont;
}

//Anula OnBeginPrint para establecer la fuente que se va a utilizar
protected override void OnBeginPrint(PrintEventArgs ev)
{
base.OnBeginPrint(ev) ;
overflowText = null;
}

//Anula el OnPrintPage para proveer la logica de impresión del documento
protected override void OnPrintPage(PrintPageEventArgs ev)
{

base.OnPrintPage(ev) ;

float lpp = 0 ;
float yPos = 0 ;
int count = 0 ;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
string line = null;

//Trabaja fuera del numero de lineas por página
//Usa la propiedad MarginBounds en el evento para hacer esto.
lpp = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics) ;

//El texto excedido de la última página se imprimirá en la siguiente
while (count < lpp && overflowText != null)
{
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
int linesPrinted = PrintLine(ev,overflowText, yPos);
count += linesPrinted;
}

//Ahora se itera sobre el archivo que imprime cada línea
//Se revisa count pimero, para no leer la linea que no se imprimirá
while (count < lpp && ((line=streamToPrint.ReadLine()) != null))
{
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
int linesPrinted = PrintLine(ev,line, yPos);
count += linesPrinted;
}

//Si se tienen más lineas entonces se imprime otra página
if (line != null)
ev.HasMorePages = true ;
else
ev.HasMorePages = false ;
}

private int PrintLine(PrintPageEventArgs e, string text, float yStartPos)
{
Graphics graphics = e.Graphics;
Margins margins = e.PageSettings.Margins;
StringFormat format = new StringFormat();
int lines;
int characters;
RectangleF rectangle = new RectangleF(margins.Left,
yStartPos,
e.MarginBounds.Width,
e.MarginBounds.Height);

graphics.MeasureString(text, printFont, rectangle.Size, format, out characters, out lines);

//Si los carácteres son menores que string.length entonces no se puede ajustar el
//párrafo entero en la página sino imprimir lo que se pueda y almacenar el resto para
//la siguiente página.
if (characters < text.Length)
{
overflowText = text.Substring(characters);
}
else
{
overflowText = null;
}

graphics.DrawString(text, printFont, Brushes.Black, rectangle, format);

//Para lineas vacias
if (lines == 0 )
lines = 1;

return lines;
}

}

Agradezco la ayuda que me puedan dar al respecto.

Que esten bien.
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