studio - itextsharp pdf
AƱadiendo texto posicionado absoluto (3)
Estoy tratando de generar una carta, dejando un espacio vacío y luego pegar sobre ella la dirección, dependiendo de dónde va a estar la ventana del sobre.
Así que empiezo haciendo esto:
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();
Esperaba poder agregar un texto en esas coordenadas, pero no pude averiguar cómo ... ¿alguien sabe una manera de hacerlo?
Encontré la respuesta " Here ". (A continuación se cita la respuesta de Yannick Smits )
===============
Prueba esto:
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();
Los parámetros de SetSimpleColumn son:
- la frase
- inferior izquierda x
- abajo a la izquierda
- superior derecha-x (llx + ancho)
- superior derecha y (lly + altura)
- líder (la cantidad de espacio en blanco entre las líneas de impresión)
- alineación.
Muchas gracias por sus datos, me encanta pero mi inglés es muy pobre, lo siento.
Este es mi código para iTextSharp
etiquetas 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();
}
}
También puede usar un ContentByte con una Matriz de texto para dibujar texto donde desee.
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();
El beneficio es que si no tiene que dibujar el tamaño completo del cuadro, el texto entrará. Con Columna simple, está dibujando un rectángulo en el documento y posicionando el texto dentro de él. Con ContentByte, usted esquiva el rectángulo y coloca el texto por sí mismo.