web-dev-qa-db-fra.com

Ajout de texte en position absolue

J'essaie de générer une lettre, de laisser un espace vide et de coller ensuite l'adresse dessus, en fonction de l'emplacement de la fenêtre de l'enveloppe.

Alors je commence à faire ceci:

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

J'espérais pouvoir ajouter du texte à ces coordonnées, mais je n'arrivais pas à comprendre comment ... quelqu'un connaissait un moyen de le faire?

18
colinbashbash

Trouvé la réponse " Ici ". (Ci-dessous la réponse citée de Yannick Smits )

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

Essaye ça:

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

les paramètres de SetSimpleColumn sont:

  1. la phrase
  2. x inférieur gauche
  3. en bas à gauche
  4. en haut à droite-x (llx + largeur)
  5. en haut à droite (lly + height)
  6. interligne (quantité d'espace vide entre les lignes d'impression)
  7. alignement.
23
colinbashbash

Vous pouvez également utiliser un ContentByte avec une matrice de texte pour dessiner du texte où vous le souhaitez. 

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

L'avantage est que si vous n'avez pas à dessiner la taille complète de la boîte dans laquelle le texte sera inséré. Avec Colonne simple, vous tracez un rectangle sur le document et y positionnez le texte. Avec ContentByte, vous esquivez le rectangle et positionnez le texte lui-même.

18
Mike Varosky

Merci beaucoup pour vos données, j'adore ça mais mon anglais est très mauvais, désolé. 

Ceci est mon code pour 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();
    }
}
0
J.Gustavo Tochetto