web-dev-qa-db-ja.com

絶対配置テキストの追加

封筒ウィンドウがどこにあるかに応じて、空の場所を残して、その上に住所を貼り付けて、手紙を生成しようとしています。

だから私はこれをやって始めます:

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

私はそれらの座標にテキストを追加できることを望んでいましたが、どのように...誰もそれを行う方法を知っていますか?

18
colinbashbash

答え「 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. 先行(印刷行間の空白の量)
  7. アライメント。
24
colinbashbash

ContentByteとText Matrixを使用して、必要な場所にテキストを描画することもできます。

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

利点は、ボックスのフルサイズを描画する必要がない場合、テキストが挿入されることです。 Simple Columnを使用すると、ドキュメントに長方形を描画し、その中にテキストを配置します。 ContentByteを使用して、長方形をかわし、テキストを単独で配置します。

18
Mike Varosky

あなたのデータに感謝します、私はそれを愛していますが、私の英語は非常に悪いです、ごめんなさい。

これは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();
    }
}
0