19

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

所以我开始这样做:

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

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

4

3 回答 3

25

找到答案“这里”。(以下引述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 + height)
  6. 前导(打印行之间的空白量)
  7. 结盟。
于 2012-08-08T14:07:10.793 回答
20

您还可以使用带有文本矩阵的 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,您可以避开矩形,并自行定位文本。

于 2012-08-08T14:29:15.330 回答
1

非常感谢您的数据,我喜欢它,但我的英语很差,对不起。

这是我的iTextSharp礼仪代码:

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();
    }
}
于 2018-02-02T12:58:58.783 回答