【问题标题】:Adding absolute positioned text添加绝对定位文本
【发布时间】:2012-08-07 22:01:50
【问题描述】:

我正在尝试生成一封信,留下一个空白位置,然后在其顶部粘贴地址,具体取决于信封窗口的位置。

所以我开始这样做了:

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

我希望能够在这些坐标处添加一些文本,但我不知道如何...有人知道怎么做吗?

【问题讨论】:

    标签: itextsharp


    【解决方案1】:

    找到答案“Here”。 (以下引用Yannick Smits的回答)

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

    试试这个:

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

    SetSimpleColumn 的参数是:

    1. 短语
    2. 左下-x
    3. 左下y
    4. 右上角-x(llx + 宽度)
    5. 右上 Y(lly + 高度)
    6. leading(打印行之间的空白量)
    7. 对齐。

    【讨论】:

    • 框高和框宽是什么意思? (第 4,5 项)
    • 我认为参数 4 和 5 是 urxury,而不是 box widthbox height。而参数6是leading,我不确定它是什么,但是0f适用于文本,所以它不是line height
    【解决方案2】:

    您还可以使用带有文本矩阵的 ContentByte 在任何您想要的地方绘制文本。

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

    好处是,如果您不必绘制文本将进入的框的全尺寸。使用简单列,您可以在文档上绘制一个矩形,并将文本定位在其中。使用 ContentByte,您可以避开矩形,并自行定位文本。

    【讨论】:

    • 这很酷。不过,我实际上想限制文本的宽度。所以在我的例子中使用 ColumnText 实际上更有用。谢谢!
    • 我在函数调用中使用了 setSimpleColumn,随后使用相同测量值的调用导致了相当不愉快的定位。更改为这种方法很快就解决了!谢谢。
    • 但是使用 ShowText 方法你不能为 RTL 语言设置 RunDirection。
    【解决方案3】:

    非常感谢您的数据,我喜欢它,但我的英语很差,抱歉。

    这是我的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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多