2012-08-07 14 views
16

Sto provando a generare una lettera, lasciando un punto vuoto e quindi incollare sopra l'indirizzo superiore, a seconda di dove sarà la finestra della busta.Aggiunta di testo con posizionamento assoluto

Così ho Iniziamo a fare questo:

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

speravo di essere in grado di aggiungere del testo a quelle coordinate, ma non riuscivo a capire come ... Qualcuno sa un modo per farlo ?

risposta

21

Trovato la risposta "Here". (Risposta qui sotto è citato da Yannick Smits)

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

Prova questo:

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

parametri di SetSimpleColumn sono:

  1. la frase
  2. inferiore sinistro-x
  3. inferiore sinistro-y
  4. superiore destro-x (llx + larghezza)
  5. superiore destro-y (lly + altezza)
  6. leader (La quantità di spazio vuoto tra righe di stampa)
  7. allineamento.
+0

Cosa significa Box Altezza e larghezza Box significa? (item 4,5) –

+0

Penso che gli argomenti 4 e 5 siano 'urx' e' ury', non 'box width' e' box height'. E l'argomento 6 è 'leading', che non sono sicuro di cosa sia, ma 0f funziona per il testo, quindi non è' line height '. –

+0

Grazie Marco. L'ho corretto – colinbashbash

16

È inoltre possibile utilizzare un ContentByte con una matrice di testo per disegnare il testo dove si desidera.

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

Il vantaggio è che se non si deve disegnare l'intera dimensione della casella in cui verrà inserito il testo. Con Colonna semplice, si disegna un rettangolo sul documento e si posiziona il testo all'interno di esso. Con ContentByte, schivi il rettangolo e posiziona il testo da solo.

+0

È fantastico. In realtà volevo limitare la larghezza del testo, però. Quindi usare ColumnText è in realtà più utile nella mia istanza. Grazie! – colinbashbash

+0

Stavo usando setSimpleColumn in una chiamata di funzione e le chiamate successive con le stesse misurazioni hanno causato un posizionamento piuttosto spiacevole. Passare a questo metodo l'ha risolto molto velocemente! Grazie. –

+0

Tuttavia, utilizzando il metodo ShowText non è possibile impostare RunDirection per le lingue RTL. – Arman

0

Grazie mille per i tuoi dati, lo adoro ma il mio inglese è molto povero, mi dispiace.

Questo è il mio codice per 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(); 
    } 
} 
Problemi correlati