Hola amigos necesito una yuda urgente, estoy generando un datagridview y l oestoy exportando a pdf me gustaria poder alinear las columnas como quiero y poder colocarle el numero de la hoja a cada una si algo aca dejo el codigo . mucahs gracias.
OdbcDataAdapter dta =new OdbcDataAdapter (" SELECT a.cdgo_prdcto COD,a.nmbre_prdcto DESCRIPCION, SUM(b.cntdad)PMVTA,a.csto_rpscion CR, " +
" a.clfccion_prmnnte P, a.clfccion_tmpral T,a.cdgo_brra EAN" +
" from prdcto a , prmdio_vnta b " +
" where estdo = 'A' " +
" and a.cdgo_prdcto = b.cdgo_prdcto " +
" group by 1,2,4,5,6,7 " +
" order by 2 ", conn);
DataSet dsdatos = new DataSet();
dta.Fill(dsdatos, "Datos");
this.dataGridView1.DataMember = "Datos";
//this.dataGridView1.Columns(1).Width = 4400;
this.dataGridView1.DataSource = dsdatos;
}
private void Form1_Load(object sender, EventArgs e)
{
}
//private void dataGridView1_DefaultCellStyleChanged(object sender, EventArgs e)
private void btnExportar_Click(object sender, EventArgs e)
{
DateTime hora = DateTime.Now;
string fcha_ttal = Convert.ToDateTime(hora).Day + "/" + Convert.ToDateTime(hora).Month + "/" + Convert.ToDateTime(hora).Year;
Document doc = new Document(PageSize.LETTER, 10, 10, 10, 10);
string filename = "C:\\Temp\\Listado Total.pdf";
iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(@"C:\Mis documentos\Biblia_productos\Biblia_productos\Images\marion.JPG"); jpg.Alignment = iTextSharp.text.Image.ALIGN_LEFT;
Chunk encab = new Chunk(" LISTA DE PRODUCTOS CODIFICADOS EN " + fcha_ttal + "", FontFactory.GetFont("COURIER", 12));
try
{
FileStream file = new FileStream
(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
PdfWriter.GetInstance(doc, file);
doc.Open();
doc.Add(new Paragraph(encab));
doc.Add(jpg);
GenerarDocumento(doc);
Process.Start(filename);
doc.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//Función que genera el documento Pdf
public void GenerarDocumento(Document document)
{
PdfPTable datatable = new PdfPTable(dataGridView1.ColumnCount);
datatable.DefaultCell.Padding = 1;
float[] headerwidths = GetTamañoColumnas(dataGridView1);
datatable.SetWidths(headerwidths);
datatable.WidthPercentage = 100;
datatable.DefaultCell.BorderWidth = 4; // Define el grosor del encabezado
//datatable.DefaultCell.VerticalAlignment = Element.ALIGN_CENTER; // Alinea el encabezado al centro
//datatable.DefaultCell.Column =
datatable.DefaultCell.Padding = 3; //Amplia el tamaño del encabezado
iTextSharp.text.Font fuente = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.COURIER, 9);
Phrase objP = new Phrase("A", fuente);
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
objP = new Phrase(dataGridView1.Columns[i].HeaderText, fuente);
//this.dataGridView1.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
datatable.AddCell(objP);
}
datatable.HeaderRows = 1;
datatable.DefaultCell.BorderWidth = 1;
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
objP = new Phrase(dataGridView1[j, i].Value.ToString(), fuente);
datatable.AddCell(objP);
}
datatable.CompleteRow();
}
document.Add(datatable);
}
public float[] GetTamañoColumnas(DataGridView dg)
{
float[] values = new float[dg.ColumnCount];
for (int i = 0; i < dg.ColumnCount; i++)
{
values[i] = (float)dg.Columns[i].Width;
}
return values;
}
joalbela pues la manera mas facil de hacer lo que dices es usando un reporteador como http://www.fyireporting.com/ que soporta exportacion a pdf lo e probado en estas semanas y la verdad esta muy bueno.
Lo bueno sería que dejes de abrir un nuevo tema por cada opción de estilo que le quieres poner a tus pdf :¬¬
Saludos