none
VB. NET - Como redimensionar colunas do Arquivo PDF gerada com ItextSharp RRS feed

  • Pergunta

  • Olá a todos.
    Já exporto a GRIDVIEW para PDF com ItextSharp.
    Meu problema é que a lagura das colunas que são exibidas no Grid também são geradas no PDF.
    1 - Como faço que para eu consiga redemensionar as colunas no momento da geração do PDF ?.
    2 - Como faço para inserir um imagem no PDF usando o ItextSharp ?

    Estes são os códigos:
    1 -  Capa Apresentação - Exporta Arquivo
        Private Sub btnExportaPDF_Click(sender As Object, e As EventArgs) Handles btnExportaPDF.Click
           '- Exportando o Documento
    Dim folderPath As String = 'C:\PDFs\' If Not Directory.Exists(folderPath) Then Directory.CreateDirectory(folderPath) End If Using stream As New FileStream(folderPath & "DataGridViewExport.pdf", FileMode.Create) Dim pdfDoc As New Document(PageSize.A2, 10.0F, 10.0F, 10.0F, 0.0F) PdfWriter.GetInstance(pdfDoc, stream) pdfDoc.Open() ExportarPdf(pdfDoc) pdfDoc.Close() End Using End Sub Sub ExportarPdf(ByVal docum As Document) ' Criando um objeto PDFTable com o número de colunas do DataGridView' Dim pdfTable As New PdfPTable(dgListaHistorico.ColumnCount) pdfTable.DefaultCell.Padding = 3 Dim headerwiths As Single() = GetColumnsSize(dgListaHistorico) pdfTable.WidthPercentage = 100 pdfTable.DefaultCell.BorderWidth = 2 pdfTable.HorizontalAlignment = Element.ALIGN_CENTER 'Criando o HEADER do PDF' Dim headerTitulo As New Paragraph("Relatório de Chamados Pendentes") 'Criando uma Linha abaixo do Titulo do Relatório Dim texto As New Phrase("Relatório de Pendências do período de : " + DatePIni.Text + " à " + DatePFim.Text) 'Capturando o nomes das colunas do DatraGridView For i As Integer = 0 To dgListaHistorico.ColumnCount - 1 pdfTable.AddCell(dgListaHistorico.Columns(i).HeaderText) Next pdfTable.HeaderRows = 1 pdfTable.DefaultCell.BorderWidth = 1 ' Gerando as colunas do DataGridView' For i As Integer = 0 To dgListaHistorico.Rows.Count - 2 For j As Integer = 0 To dgListaHistorico.Columns.Count - 1 pdfTable.AddCell((dgListaHistorico(j, i).Value).ToString) Next pdfTable.CompleteRow() Next 'Adicionado o documento ao PDFTable' docum.Add(headerTitulo) docum.Add(texto) docum.Add(pdfTable) End Sub
    2 - Capa Dados - Parâmetros para a PROC
        Public Function pesquisaHistoricoT(ByVal objCons As CEManHistChamado) As DataTable
            Dim dt As New DataTable
            cn = objCon.conectar
            cn.Open()
            da = New SqlDataAdapter("SP_PESQUISA_HISTORICOT", cn)
            da.SelectCommand.CommandType = CommandType.StoredProcedure
            With da.SelectCommand.Parameters
                .Add("@DATA_INI", SqlDbType.VarChar).Value = objCons.data_Ini
                .Add("@DATA_FIM", SqlDbType.VarChar).Value = objCons.data_fim
                .Add("@ID_CATEGORIA", SqlDbType.VarChar).Value = objCons.id_Categoria
                .Add("@ID_CARTEIRA", SqlDbType.VarChar).Value = objCons.id_Carteira
                .Add("@ID_CODCRED", SqlDbType.VarChar).Value = objCons.id_CodCredor
                .Add("@ID_FORNECEDOR", SqlDbType.VarChar).Value = objCons.id_Fornecedor
                .Add("@SUB_TITULO", SqlDbType.VarChar).Value = objCons.Sub_Titulo
            End With
            da.SelectCommand.ExecuteNonQuery()
            Dim retorno As String
            retorno = da.SelectCommand.ExecuteNonQuery().ToString()
            da.Fill(dt)
            dt.Columns.RemoveAt(1)
            dt.Columns.RemoveAt(0)
            Return dt
            dt.Dispose()
            da.Dispose()
            cn.Dispose()
        End Function
    3 - Relatório Gerado

    Agradeço pela ajuda.

    JoseBonfim




    • Editado JoseBonfim quinta-feira, 4 de fevereiro de 2016 00:05
    quinta-feira, 4 de fevereiro de 2016 00:01

Respostas

  • Jose o que vc esta procurando é isso aqui.

    na parte comentada, postei parte do codigo pq fica mais facil de entender.

    Tem este artigo que vai te ajudar tb, 

    http://www.andrealveslima.com.br/blog/index.php/2015/11/25/trabalhando-com-arquivos-pdf-no-c/

    Att, wsti.

    Document doc = new Document(iTextSharp.text.PageSize.A4, 25, 35, 50, 50); doc.SetPageSize(iTextSharp.text.PageSize.A4.Rotate()); PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("c:/sitHelirio/Estoque.pdf", FileMode.Create)); doc.Open(); //abre o documento e escreve iTextSharp.text.Image PNG = iTextSharp.text.Image.GetInstance(@"c:\sitHe\heoestoque1.png"); PNG.ScalePercent(30f); doc.Add(PNG); Paragraph paragrafo2 = new Paragraph("Estoque", FontFactory.GetFont("ARIAL", 12)); doc.Add(paragrafo2); Paragraph paragrafo3 = new Paragraph("Data " + data); doc.Add(paragrafo3); Paragraph paragrafo4 = new Paragraph(ms + dtih + en + fiH); doc.Add(paragrafo4); PdfPTable tabela = new PdfPTable(5); PdfPCell celula = new PdfPCell(); tabela.TotalWidth = 550f; //tAMANHO DA TABELA tabela.LockedWidth = true; //AQUI DIGO O TAMANHO DAS COLUNAS float[] widths = new float[] { 60f, 20f, 20f, 20f, 20f }; tabela.SetWidths(widths); tabela.HorizontalAlignment = 0;


    • Editado Wsti quinta-feira, 4 de fevereiro de 2016 00:24
    • Sugerido como Resposta Ricardo dos Sntos quinta-feira, 4 de fevereiro de 2016 04:34
    • Marcado como Resposta JoseBonfim quinta-feira, 4 de fevereiro de 2016 09:16
    quinta-feira, 4 de fevereiro de 2016 00:22

Todas as Respostas

  • Jose o que vc esta procurando é isso aqui.

    na parte comentada, postei parte do codigo pq fica mais facil de entender.

    Tem este artigo que vai te ajudar tb, 

    http://www.andrealveslima.com.br/blog/index.php/2015/11/25/trabalhando-com-arquivos-pdf-no-c/

    Att, wsti.

    Document doc = new Document(iTextSharp.text.PageSize.A4, 25, 35, 50, 50); doc.SetPageSize(iTextSharp.text.PageSize.A4.Rotate()); PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("c:/sitHelirio/Estoque.pdf", FileMode.Create)); doc.Open(); //abre o documento e escreve iTextSharp.text.Image PNG = iTextSharp.text.Image.GetInstance(@"c:\sitHe\heoestoque1.png"); PNG.ScalePercent(30f); doc.Add(PNG); Paragraph paragrafo2 = new Paragraph("Estoque", FontFactory.GetFont("ARIAL", 12)); doc.Add(paragrafo2); Paragraph paragrafo3 = new Paragraph("Data " + data); doc.Add(paragrafo3); Paragraph paragrafo4 = new Paragraph(ms + dtih + en + fiH); doc.Add(paragrafo4); PdfPTable tabela = new PdfPTable(5); PdfPCell celula = new PdfPCell(); tabela.TotalWidth = 550f; //tAMANHO DA TABELA tabela.LockedWidth = true; //AQUI DIGO O TAMANHO DAS COLUNAS float[] widths = new float[] { 60f, 20f, 20f, 20f, 20f }; tabela.SetWidths(widths); tabela.HorizontalAlignment = 0;


    • Editado Wsti quinta-feira, 4 de fevereiro de 2016 00:24
    • Sugerido como Resposta Ricardo dos Sntos quinta-feira, 4 de fevereiro de 2016 04:34
    • Marcado como Resposta JoseBonfim quinta-feira, 4 de fevereiro de 2016 09:16
    quinta-feira, 4 de fevereiro de 2016 00:22
  • Usando a ideia do wsti voce pode pegar o tamanho direto da grid para deixar dinâmico!
    quinta-feira, 4 de fevereiro de 2016 04:34
  • É justamente isso que é feito nos códigos que mostrei,
    Eu pego os tamanho das colunas, porém não me atende.
    Olhando o exemplo do relatório as linhas ficam quebradas, então preciso redefinir o tamanho na geração do PDF para dar melhor visibilidade.

    Obrigado,


    JoseBonfim

    quinta-feira, 4 de fevereiro de 2016 09:21
  • Wsti,

    Obrigado pela resposta.
    Já votei e marquei como resposta.

    Atenciosamente,


    JoseBonfim

    quinta-feira, 4 de fevereiro de 2016 09:23