2012-08-07 62 views
16

Estoy tratando de generar una letra, dejando un espacio vacío y luego pegar sobre la parte superior la dirección, dependiendo de dónde va a estar la ventana del sobre.Agregando texto de posición absoluta

Así que a empezar haciendo esto:

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(); 

Tenía la esperanza de ser capaz de añadir un poco de texto en esas coordenadas, pero no pude encontrar la manera ... Alguien sabe una manera de hacerlo ?

Respuesta

21

Encontré la respuesta "Here". (Respuesta A continuación se cita a partir Yannick Smits)

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

Prueba esto:

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(); 

parámetros de SetSimpleColumn son:

  1. la frase
  2. inferior izquierda-x
  3. inferior izquierda-y
  4. superior derecha-x (llx + anchura)
  5. -derecha-y superior (LLY + altura)
  6. líder (La cantidad de espacio en blanco entre las líneas de impresión)
  7. alineación.
+0

¿Qué significa Altura de la caja y la caja Ancho? (item 4,5) –

+0

Creo que los argumentos 4 y 5 son 'urx' y' ury', no 'box width' y' box height'. Y el argumento 6 es 'leading', que no estoy seguro de qué es, pero 0f funciona para texto, por lo que no es' line height'. –

+0

Gracias Mark. Lo corregí. – colinbashbash

16

También puede usar un ContentByte con una matriz de texto para dibujar texto donde desee.

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(); 

El beneficio es que si no tiene que dibujar el tamaño completo de la caja, el texto entrará. Con Simple Column, está dibujando un rectángulo en el documento y colocando el texto dentro de él. Con ContentByte, esquivas el rectángulo y colocas el texto por sí mismo.

+0

Eso es genial. Sin embargo, en realidad quería limitar el ancho del texto. Entonces, usar ColumnText es realmente más útil en mi instancia. ¡Gracias! – colinbashbash

+0

Estaba usando setSimpleColumn en una llamada a función, y las llamadas posteriores con las mismas medidas causaron un posicionamiento bastante desagradable. ¡Cambiar a este método solucionó eso muy rápido! Gracias. –

+0

Pero al usar el método ShowText no puede establecer RunDirection para los idiomas RTL. – Arman

0

Muchas gracias por sus datos, me encanta pero mi inglés es muy pobre, lo siento.

Este es mi código de 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(); 
    } 
} 
Cuestiones relacionadas