20

I'm trying to generate a letter, leaving an empty spot and then paste over the top of it the address, depending on where the envelope window is going to be.

So I start off doing this:

Document doc = new Document(PageSize.LETTER, 72, 72, 72, 72); var w = PdfWriter.GetInstance(doc, output); Font font = FontFactory.GetFont("arial", 10); doc.Open(); doc.Add(new Paragraph("date", font) { SpacingAfter = 5 }); doc.Add(new Paragraph("\n\n\n\n\n\n", font));//empty spot doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 }); doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 }); doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 }); doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 }); doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 }); float llx = 63f, lly = 450f, urx = 387f, ury = 531f; ?? Somehow add "name\n address line 1\n address line2\n city state zip" doc.Close(); 

I was hoping to be able to add some text at those coordinates, but I couldn't figure out how... anybody know a way to do it?

3 Answers 3

26

Found the answer "Here". (Below is quoted answer from Yannick Smits)

===============

Try this:

ColumnText ct = new ColumnText(cb); Phrase myText = new Phrase("TEST paragraph\nNewline"); ct.SetSimpleColumn(myText, 34, 750, 580, 317, 15, Element.ALIGN_LEFT); ct.Go(); 

parameters of SetSimpleColumn are:

  1. the phrase
  2. lower-left-x
  3. lower-left-y
  4. upper-right-x (llx + width)
  5. upper-right-y (lly + height)
  6. leading (The amount of blank space between lines of print)
  7. alignment.
Sign up to request clarification or add additional context in comments.

2 Comments

What does Box Height and Box Width mean? (item 4,5)
I think arguments 4 and 5 are urx and ury, not box width and box height. And argument 6 is leading, which I am not sure what it is, but 0f works for text, so it is not line height.
20

You can also use a ContentByte with a Text Matrix to draw text wherever you want.

PdfContentByte cb = writer.DirectContent; cb.BeginText(); BaseFont f_cn = BaseFont.CreateFont("c:\\windows\\fonts\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.SetFontAndSize(f_cn, 6); cb.SetTextMatrix(475, 15); //(xPos, yPos) cb.ShowText("Some text here and the Date: " + DateTime.Now.ToShortDateString()); cb.EndText(); 

The benefit is that if you don't have to draw the full size of the box the text will go into. With Simple Column, you are drawing a rectangle on the document, and positioning the text within it. With ContentByte, you dodge the rectangle, and position the text by itself.

3 Comments

That's cool. I actually wanted to limit the text's width, though. So using ColumnText is actually more useful in my instance. Thanks!
I was using the setSimpleColumn in a function call, and subsequent calls with the same measurements caused rather unpleasant positioning. Changing to this method fixed that very quickly! Thanks.
But using ShowText method you cannot set RunDirection for RTL languages.
1

Thanks a lot for your data, I love it but my english is very poor, sorry.

This is my code for iTextSharp etiquetas:

public void impriItex() { iTextSharp.text.Font fontH1 = new iTextSharp.text.Font(FUENTE_BASE, 14, iTextSharp.text.Font.ITALIC); iTextSharp.text.Font fuente = new iTextSharp.text.Font(FUENTE_BASE, 12, iTextSharp.text.Font.NORMAL); iTextSharp.text.Font FUENTE_CABECERA_TABLA = new iTextSharp.text.Font(FUENTE_BASE, 10, iTextSharp.text.Font.BOLD); dataGridViewOculta.DataSource = fun.CargaDato(cargaVelores); dataGridViewTotales.DataSource = fun.CargaDato(cargaVelores); dataGridViewVentas.DataSource = fun.CargaDato(cargaVelores); //Letras //Tabla PdfPTable pdfTable = new PdfPTable(6); pdfTable.DefaultCell.Padding = 2; pdfTable.WidthPercentage = 40; pdfTable.HorizontalAlignment = Element.ALIGN_CENTER; pdfTable.DefaultCell.BorderWidth = 1; //cabeceras foreach (DataGridViewColumn column in dataGridViewOculta.Columns) { PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, FUENTE_CABECERA_TABLA)); cell.HorizontalAlignment = Element.ALIGN_CENTER; cell.BackgroundColor = new iTextSharp.text.BaseColor(210, 240, 240); pdfTable.AddCell(cell); } //datos foreach (DataGridViewRow row in dataGridViewOculta.Rows) { try { foreach (DataGridViewCell cell in row.Cells) { String texto = cell.Value.ToString(); String textovacio = texto.Replace("00:00:00", " "); PdfPCell cosa = new PdfPCell(new Phrase(textovacio, fuente)); cosa.HorizontalAlignment = Element.ALIGN_CENTER; pdfTable.AddCell(cosa); pdfTable.HorizontalAlignment = Element.ALIGN_CENTER; } } catch { return; } } //Exporting to PDF string folderPath = "C:\\PDFs\\"; if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } using (FileStream stream = new FileStream(folderPath + "Etiquetas.pdf", FileMode.Create)) { Document pdfDoc = new Document(PageSize.A4, 0f, 0f, 0f, 0f); PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream); PdfPTable tabla = new PdfPTable(1); pdfDoc.Open(); PdfContentByte cb = writer.DirectContent; PdfContentByte lineas = writer.DirectContent; for (int fila = 0; fila < dataGridViewVentas.Rows.Count - 1; fila++) { for (int col = 0; col < dataGridViewVentas.Rows[fila].Cells.Count; col++) labelTitulo.Text = "Etiquetas"; Cantidad = dataGridViewVentas.Rows[fila].Cells[0].Value.ToString(); IdColor = dataGridViewVentas.Rows[fila].Cells[1].Value.ToString(); IdCategoria = dataGridViewVentas.Rows[fila].Cells[2].Value.ToString(); NomCategoria = dataGridViewVentas.Rows[fila].Cells[3].Value.ToString(); Colores = dataGridViewVentas.Rows[fila].Cells[4].Value.ToString(); CodigoDeGrupo = dataGridViewVentas.Rows[fila].Cells[5].Value.ToString(); lblNombreSocio.Text = IdColor + ":" + Cantidad; String espacio = " "; Paragraph linea = new Paragraph("________________________________________________________", fuente); Paragraph lineaDoble = new Paragraph(Cantidad, fuente); Paragraph SocioPar = new Paragraph("Color:" + lblNombreSocio.Text, fuente); Paragraph SociedadPar = new Paragraph("Categoria: " + NomCategoria, fuente); Paragraph Titulo = new Paragraph(labelTitulo.Text, fontH1); Paragraph parrafoEspacio = new Paragraph(" ", fuente); linea.Alignment = Element.ALIGN_CENTER; lineaDoble.Alignment = Element.ALIGN_CENTER; Titulo.Alignment = Element.ALIGN_CENTER; SocioPar.Alignment = Element.ALIGN_CENTER; SociedadPar.Alignment = Element.ALIGN_CENTER; pdfTable.HorizontalAlignment = Element.ALIGN_CENTER; pdfDoc.Add(linea); pdfDoc.Add(Titulo); pdfDoc.Add(lineaDoble); pdfDoc.Add(parrafoEspacio); pdfDoc.Add(SocioPar); pdfDoc.Add(SociedadPar); // pdfDoc.Add(pdfTable);} for (int x = 0; x < Convert.ToInt32(Cantidad); x++) { cb.Rectangle(posx, posy, 40f, 25f); lineas.SetLineWidth(1); lineas.MoveTo(posx+20, posy+15); lineas.LineTo(posx+20,posy); lineas.Stroke(); // lineas. lineas.MoveTo(posx + 20, posy+10 ); lineas.LineTo(posx, posy + 10); lineas.MoveTo(posx + 40, posy + 10); lineas.LineTo(posx, posy + 10); lineas.Stroke(); //texto !!!!!!!!!!! lineas.BeginText(); lineas.SetFontAndSize(FUENTE_BASE, 6); lineas.SetTextMatrix(posx, posy); lineas.ShowText(IdColor); lineas.EndText(); //tabla.AddCell("prueba"); // pdfDoc.Add(tabla); Chunk c = new Chunk(x.ToString()); // iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(posx, 650f, 25f, 10f); // cb.Rectangle(rect); cb.Stroke(); float nuevo = posx + 42f; posx = nuevo; if (posx > 500f) { posx = 20; posy = posy-35f; } } pdfDoc.NewPage(); posx = 10f; posy = 700; } pdfDoc.Close(); stream.Close(); } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.