Array
(
)

Personalização de pdf com iTextShap

Soeusei62
   - 29 abr 2011

  Estou utilizando o iTextSharp para exportar os relatórios para pdf. Porém estou com uma dúvida quanto a definição da largura das colunas. Acontece que todas as colunas estão sendo geradas com o tamanho automático, porém gostaria de personalizar pois tem um campo que necessita ter uma largura um pouco maior que as outras.

Este é o meu código:

Public Shared Sub ExportToPDF(ByVal dt As DataTable, ByVal dtFilters As DataTable, ByVal NomeDoc As String)
        Dim Response As System.Web.HttpResponse _
        = System.Web.HttpContext.Current.Response
        Response.ContentType = "application/pdf"
        Response.AddHeader("content-disposition", "attachment;filename=" + DataName +  NomeDoc + ".pdf")
        Response.Cache.SetCacheability(HttpCacheability.NoCache)

        Dim CaminhoImagens = System.Configuration.ConfigurationManager.AppSettings("Imagens")
        Dim pdfDoc As New Document(PageSize.A4.Rotate(), 30, 30, 30, 30)
        Dim imgHeader As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(CaminhoImagens + "/header_report.jpg")
        Dim table As New PdfPTable(dt.Columns.Count)
        Dim tableFilter As New PdfPTable(2)
        Dim cellCol As New PdfPCell()
        Dim cellRow As New PdfPCell()
        Dim cellFilter As New PdfPCell()
        Dim fontColor As New Font

        table.WidthPercentage = 100
        tableFilter.WidthPercentage = 100

        For Each row As DataRow In dtFilters.Rows
            For Each Col As DataColumn In dtFilters.Columns
                cellFilter.Phrase = New Phrase(Col.ToString + ": " + row.Item(Col).ToString)
                cellFilter.Border = 0
                tableFilter.AddCell(cellFilter)
            Next
        Next

        For Each col As DataColumn In dt.Columns
            fontColor.Color = BaseColor.WHITE
            cellCol.Phrase = New Phrase(col.ToString, New Font(fontColor))
            cellCol.BackgroundColor = New BaseColor(127, 127, 127)
            table.AddCell(cellCol)
        Next

        For Each row As DataRow In dt.Rows
            For Each strCol As DataColumn In dt.Columns
                cellRow.Phrase = New Phrase(row.Item(strCol).ToString)
                cellRow.Top = 0
                cellRow.Border = 1
                table.AddCell(cellRow)
            Next
        Next

        PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
        pdfDoc.Open()
        pdfDoc.Add(imgHeader)
        pdfDoc.Add(tableFilter)
        pdfDoc.Add(New Phrase(Environment.NewLine))
        pdfDoc.Add(table)
        pdfDoc.Close()
    End Sub

    Alguém tem idéia de como posso fazer isso? Já defini as tabelas com largura de 100% com o comando "WidthPercentage = 100", mas preciso que a coluna "Action" seja um pouco mais larga como mostro na imagem: http://img217.imageshack.us/i/imagepost.jpg/

agradeço a atenção,

Bruno

 

Diego Barcelos
   - 29 abr 2011

Não sei como é em VB.NET, mas o itextsharp no C# eu utilizei num boleto bancario em PDF
PdfPCell cell = new PdfPCell();
//Altura Fixa da Célulacell.FixedHeight = 72f;
//Mesclar celulas cell.Colspan = 5;
//Largura da célula
acho que deve sercell.FixedWidth = 72f;

Existe um livro que me ajudou muito que é específico desta biblioteca.
iTextSharp in Action.
Espero ter ajudado, qualquer coisa só entrar em contato.

Soeusei62
   - 02 mai 2011

A propriedade cell.FixedHeight existe mas o cell.FixedWidth não. 

Welington
   - 17 mai 2016

Boa tarde! sei que seu post é antigo mais tive o mesmo problema com o tamanho das colunas
quando exportava o datagrid para pdf

criei um método para resolver da seguinte maneira

Primeiramente importe para classe:
Imports System.IO
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports iTextSharp.text.BaseColor

Em seguida declare o Método:
'Metodo que exporta o DataGrid para Arquivo PDF recebe como parametros o datagrid a se exportado e o local onde o mesmo será armazenado

Public Shared Sub ExportaPDF(ByVal DataGridView As DataGridView, ByVal LocalArquivo As String)
'Criando iTextSharp tabela a partir dos dados DataTable
Dim pdfTable As New PdfPTable(DataGridView.ColumnCount)
'Define algumas propriedades para a tabela
pdfTable.DefaultCell.Padding = 3
pdfTable.HorizontalAlignment = Element.ALIGN_LEFT
pdfTable.DefaultCell.BorderWidth = 1
'Verificando total de colunas ( obs o -1 foi para ajutas a qtd de colunas da grid )
Dim TotalColunas = DataGridView.ColumnCount - 1
'Declarando um vetor para armazenasr o tamanho das colunas
Dim DimensaoWidth(TotalColunas) As Integer
'Adicionando linha de cabeçalho
For Each column As DataGridViewColumn In DataGridView.Columns
Dim cell As New PdfPCell(New Phrase(column.HeaderText))
cell.BackgroundColor = New iTextSharp.text.BaseColor(240, 240, 240)
pdfTable.AddCell(cell)
'Variável recebe a posicao da coluna
Dim Posicao = column.Index
'Vetor que armazena a posição juntamente com o tamanho daquela coluna (obs o + 5 foi para ajustar to tamanho)
DimensaoWidth(Posicao) = (column.Width + 5)
Next
' Adicionando as informaçoes da linha
For Each row As DataGridViewRow In DataGridView.Rows
For Each cell As DataGridViewCell In row.Cells
pdfTable.AddCell(cell.Value.ToString())
Next
Next
'Neste momento é definido as dimensões para cada coluna
pdfTable.SetWidths(DimensaoWidth)
'Exporting to PDF
Dim folderPath As String = LocalArquivo
'If Not Directory.Exists(folderPath) Then
'Directory.CreateDirectory(folderPath)
'End If
Using stream As New FileStream(folderPath, FileMode.Create)
Dim pdfDoc As New Document(PageSize.A2, 10.0F, 10.0F, 10.0F, 0.0F)
PdfWriter.GetInstance(pdfDoc, stream)
pdfDoc.Open()
pdfDoc.Add(pdfTable)
pdfDoc.Close()
stream.Close()
End Using
Dim RespostaPergunta = MessageBox.Show("Exportado com sucesso!" + vbCrLf + vbCrLf + "Deseja abrir o local do arquivo??", "Atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Information)
If RespostaPergunta = Windows.Forms.DialogResult.Yes Then
Dim Local = System.AppDomain.CurrentDomain.BaseDirectory() + "ArqPDF"
Process.Start(Local)
End If
End Sub