How to find current (X, Y) position in iTextSharp?

I need to create a PDF file with several sections, and after each section I need to add a line, but I do not know where to draw this line.

I need to find the exact coordinates [x, y] where the next element in the document will be written.

+4
source share
4 answers

Like @Olaf, use GetVerticalPosition to get Y X is just a LeftMargin document. Below is the full working WinForms application focused on iTextSharp 5.1.1.0, which I hope will do what you are looking for:

 using System; using System.Text; using System.Windows.Forms; using iTextSharp.text; using iTextSharp.text.pdf; using System.IO; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //Test file name string TestFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf"); //Standard iTextSharp setup using (FileStream fs = new FileStream(TestFile, FileMode.Create, FileAccess.Write, FileShare.None)) { using (Document doc = new Document(PageSize.LETTER)) { using (PdfWriter w = PdfWriter.GetInstance(doc, fs)) { //Open the document for writing doc.Open(); //Will hold our current x,y coordinates; float curY; float curX; //Add a paragraph doc.Add(new Paragraph("It was the best of times")); //Get the current Y value curY = w.GetVerticalPosition(true); //The current X is just the left margin curX = doc.LeftMargin; //Set a color fill w.DirectContent.SetRGBColorStroke(0, 0, 0); //Set the x,y of where to start drawing w.DirectContent.MoveTo(curX, curY); //Draw a line w.DirectContent.LineTo(doc.PageSize.Width - doc.RightMargin, curY); //Fill the line in w.DirectContent.Stroke(); //Add another paragraph doc.Add(new Paragraph("It was the word of times")); //Repeat the above. curX never really changes unless you modify the document margins curY = w.GetVerticalPosition(true); w.DirectContent.SetRGBColorStroke(0, 0, 0); w.DirectContent.MoveTo(curX, curY); w.DirectContent.LineTo(doc.PageSize.Width - doc.RightMargin, curY); w.DirectContent.Stroke(); //Close the document doc.Close(); } } } this.Close(); } } } 
+8
source

I believe only y-position is available: try

 PdfWriter.getVerticalPosition() 
+7
source

Indeed, there is only a y-position.

But if you need to make some simple text and after that place a picture or draw a line, it can always calculate the size of the displayed text:

 var chunk = new Chunk(String.Format("Sample text {0}", )); document.Add(new Paragraph(t)); float curY = writer.GetVerticalPosition(false); float x = document.Left + chunk.GetWidthPoint(); 
+2
source

If you just need to draw a line after the current section, you may not need to know the current x and y. Try the following:

  iTextSharp.text.pdf.draw.DottedLineSeparator sepLINE = new iTextSharp.text.pdf.draw.DottedLineSeparator(); sepLINE.LineWidth = 1; sepLINE.Gap = 2; sepLINE.Percentage = 50; sepLINE.LineColor = new iTextSharp.text.BaseColor(System.Drawing.Color.Blue); Chunk chnkLINE = new Chunk(sepLINE); pdfDoc.Add(chnkLINE); 
+1
source

All Articles