I’ve been trying to solve this problem for a while now to no avail. I have some text in iTextSharp I’m trying to put on a newline. I’ve tried using the \n escape character, Environment.NewLine, and document.Add(new Phrase(Environment.NewLine)) without any success. So is there a way to do this? Here is the piece of my code I’m trying to do it in (note the lines commented with //Doesn't work):
//Open the reader
PdfReader reader = new PdfReader(oldFile);
Rectangle size = reader.GetPageSizeWithRotation(1);
Document document = new Document(size);
// open the writer
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
//Configure the content
PdfContentByte cb = writer.DirectContent;
// select the font properties
BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SetColorFill(BaseColor.BLACK);
cb.SetFontAndSize(bf, 10);
//Write the text here
cb.BeginText();
text = "F\n";//Doesn’t work
document.Add(new Phrase(Environment.NewLine));//Doesn’t work
text += "o\n";
text += Environment.NewLine;//Doesn’t work
text += "o\n";
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, 85, 311, 0);
cb.EndText();
//Create the new page
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
//Close all streams
document.Close();
fs.Close();
writer.Close();
reader.Close();
Any suggestions?
Edit One:
Still not working with document.Add(new Paragraph("\n"));. Did I do it wrong?
cb.BeginText();
text = "F";
document.Add(new Paragraph("\n"));
text += "o";
document.Add(new Paragraph("\n"));
text += "o";
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, 85, 311, 0);
cb.EndText();
There’s two main ways to work with text in iTextSharp, either through the abstractions like
ParagraphandPhraseor by manually executing commands using aPdfContentByte. The abstractions will handle things like margins, line breaks and spacing while the manual route is all up to you. You can’t really mix the two which is what you are doing. I’d highly recommend using the abstractions instead of the manual route unless you have a specific need for granular control. Below is a sample showing both off.But to answer your question specifically, raw PDF commands (which you are using) draw text at certain
x,ycoordinates from left to right and they do not support the concept of “returns” or “line breaks”. To do this you need to manually move the current text cursor to a new line. See the code below for a sample of that.