Agradeceríamos tu ayuda para extender nuestros ensayos en referencia a las ciencias de la computación.
Solución:
Hay dos formas principales de trabajar con texto en iTextSharp, ya sea a través de abstracciones como Paragraph
y Phrase
o ejecutando comandos manualmente usando un PdfContentByte
. Las abstracciones manejarán cosas como márgenes, saltos de línea y espacios, mientras que la ruta manual depende de usted. Realmente no puedes mezclar los dos, que es lo que estás haciendo. Recomiendo encarecidamente usar las abstracciones en lugar de la ruta manual, a menos que tenga una necesidad específica de control granular. A continuación se muestra una muestra que muestra ambos.
Pero para responder a su pregunta específicamente, los comandos de PDF sin formato (que está utilizando) dibujan texto en ciertos x,y
coordenadas de izquierda a derecha y no admiten el concepto de “retornos” o “saltos de línea”. Para hacer esto, debe mover manualmente el cursor de texto actual a una nueva línea. Vea el código a continuación para ver una muestra de eso.
string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.pdf");
using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
using (Document doc = new Document(PageSize.LETTER))
using (PdfWriter writer = PdfWriter.GetInstance(doc, fs))
doc.Open();
//This creates two lines of text using the iTextSharp abstractions
doc.Add(new Paragraph("This is Paragraph 1"));
doc.Add(new Paragraph("This is Paragraph 2"));
//This does the same as above but line spacing needs to be calculated manually
PdfContentByte cb = writer.DirectContent;
cb.SaveState();
cb.SetColorFill(BaseColor.BLACK);
cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12f);
cb.BeginText();
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This is cb1", 20, 311, 0);
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This is cb2", 20, 291, 0);//Just guessing that line two should be 20px down, will actually depend on the font
cb.EndText();
cb.RestoreState();
doc.Close();
Prueba algo como esto:
document.Add(new Chunk("n"));
document.Add(new Paragraph(" "));
funciona bien para mí. Recuerda el Paragraph
declaración agrega automáticamente un salto de línea. Todo lo que tienes que hacer es darle algo para renderizar. En este caso, un espacio funcionará bien.
Si conservas algún reparo y capacidad de ascender nuestro escrito te recordamos añadir un exégesis y con mucho placer lo estudiaremos.