VB .NET - Criando documentos PDF (PDFSharp + Migradoc) - III


 Hoje eu volto ao assunto de como gerar documentos PDF usando a linguagem VB .NET. Neste artigo eu vou mostrar como gerar arquivos PDFs a partir de arquivos texto usando o PDFSharp.

Continuando o artigo anterior vou mostrar como gerar um arquivo PDF a partir de um arquivo texto já pronto, usando os recursos do PDFSharp.


Recursos usados :

Gerando um arquivo PDF a partir de um arquivo texto

Abra a solução VBNET_Gerando_PDF criada na primeira parte do artigo.

Vamos incluir um novo projeto para gerar PDFs a partir de arquivos textos.

No menu FILE clique em Add -> New Project;

Clique em Visual Basic -> Windows Forms Application e informe o nome 2_PDF_Texto:

Vamos agora incluir uma referência à biblioteca PDFSharp em nosso projeto 2_PDF_Texto via Nuget.

No menu TOOLS clique em Nuget Package Manager -> Manage Nuget Packages for Solution;

Quando a janela do assistente aparece clique em Installed packages para visualizar o pacote do PDFSharp+Migradoc que já instalamos em nossa solução;

Agora clique no botão Manage para visualizar a janela onde serão exibidos os projetos da solução;

Nesta janela vemos em quais projetos o pacote já esta instalado e podemos selecionar um projeto no qual desejamos instalar o pacote;

Marque o projeto 2_PDF_Texto e clique no botão OK para instalar o pacote em nosso projeto:

Se preferir usar a janela do Package Manager Console digite o seguinte comando : Get-Project 2_PDF_Texto | Install-Package PdfSharp -Version 1.32.3057

Vamos agora definir a interface com o usuário incluindo no formulário form1.cs do projeto os seguintes controles a partir da ToolBox:

Disponha os controles no formulário conforme o leiaute da figura abaixo:

Vamos começar definindo os namespaces usados no formulário:

Imports System.Security

Imports System.IO

Imports PdfSharp

Imports PdfSharp.Drawing

Imports PdfSharp.Pdf

A seguir temos o código no evento Click do botão btnProcurar que permite ao usuário selecionar um arquivo texto do computador local:

Private Sub btnProcurar_Click(sender As Object, e As EventArgs) Handles btnProcurar.Click
        Dim ofd1 As OpenFileDialog = New OpenFileDialog
        'define as propriedades do controle OpenFileDialog
        ofd1.Multiselect = False
        ofd1.Title = "Selecionar Arquivo "
        ofd1.InitialDirectory = "C:\Dados\"
        'filtra para exibir somente arquivos textos
        ofd1.Filter = "Texto (*.TXT)|*.TXT;|" + "Todos (*.*)|*.*"
        ofd1.CheckFileExists = True
        ofd1.CheckPathExists = True
        ofd1.FilterIndex = 1
        ofd1.RestoreDirectory = True
        ofd1.ReadOnlyChecked = True
        ofd1.ShowReadOnly = False
        Dim dr As DialogResult = ofd1.ShowDialog()
        If dr = System.Windows.Forms.DialogResult.OK Then
            Try
                ' Le o arquivo selecionado
                txtArquivoTexto.Text = ofd1.FileName
            Catch ex As SecurityException
                ' O usuário  não possui permissão para ler arquivos
                MessageBox.Show("Erro de segurança Contate o administrador de segurança da rede." & vbLf & vbLf + "Mensagem : " 
+ ex.Message + vbLf & vbLf + "Detalhes (enviar ao suporte):" & vbLf & vbLf + ex.StackTrace)
            Catch ex As Exception
                ' Não pode carregar a imagem (problemas de permissão)
                MessageBox.Show("Você pode não ter permissão para ler o arquivo , ou " + " ele pode estar corrompido." & vbLf & 
vbLf & "Erro reportado : " + ex.Message)
            End Try
        End If
    End Sub

 

No evento Click do botão de comando btnProcurarPasta temos o código que seleciona a pasta de destino onde o arquivo PDF será salvo:

 Private Sub btnProcurarPasta_Click(sender As Object, e As EventArgs) Handles btnProcurarPasta.Click
        Dim fbd1 As FolderBrowserDialog = New FolderBrowserDialog
        If fbd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            txtDestino.Text = fbd1.SelectedPath
        End If
End Sub

O código acima usa o objeto FolderBrowserDialog para selecionar um diretório do computador local.

Finalmente no evento Click do botão de comando - Gerar Arquivo PDF - defina o código a seguir para gerar o arquivo PDF a partir do arquivo texto:

Private Sub btnGerarPDF_Click(sender As Object, e As EventArgs) Handles btnGerarPDF.Click
        Try
            'verifica se o arquivo texto e o destino foram informadaos
            If Not String.IsNullOrEmpty(txtArquivoTexto.Text) And Not String.IsNullOrEmpty(txtDestino.Text) Then
                'verifica se a pasta de destino existe
                If Directory.Exists(txtDestino.Text) Then
                    'define um linha e ponto e le o arquivo texto
                    Dim linha As String
                    Dim yPonto As Integer = 0
                    Dim arquivoTexto As TextReader = New StreamReader(txtArquivoTexto.Text)
                    'cria um documento PDF
                    Dim pdf As PdfDocument = New PdfDocument
                    'define o titulo
                    pdf.Info.Title = "Gerando PDF de arquivo texto"
                    'define uma pagina
                    Dim paginaPDF As PdfPage = pdf.AddPage
                    Dim graph As XGraphics = XGraphics.FromPdfPage(paginaPDF)
                    'define uma fonte
                    Dim font As XFont = New XFont("Trebuch", 14, XFontStyle.Regular)
                    'le o arquivo texto linha a linha
                    While True
                        linha = arquivoTexto.ReadLine()
                        If linha Is Nothing Then
                            Exit While
                        Else
                            'gera o texto no pdf
                            graph.DrawString(linha, font, XBrushes.Black, New XRect(10, yPonto, paginaPDF.Width.Point, paginaPDF.Height.Point), XStringFormats.TopLeft)
                            yPonto = yPonto + 20
                        End If
                    End While
                    'extrai o nome do arquivo sem a extensão e acrescenta .pdf
                    Dim arquivoPDF As String = Path.GetFileNameWithoutExtension(txtArquivoTexto.Text) + ".pdf"
                    'salva o pdf
                    pdf.Save(arquivoPDF)
                    'fecha o arquivo texto
                    arquivoTexto.Close()
                    arquivoTexto = Nothing
                    MessageBox.Show("Arquivo   [" + arquivoPDF + "]   gerado com sucesso.", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    'exibe o arquivo texto criado
                    Process.Start(arquivoPDF)
                Else
                    MessageBox.Show("O arquivo/diretório de destino não existe...", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Else
                MessageBox.Show("Informe o arquivo o texto...", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Neste exemplo geramos um filestream a partir do arquivo texto e percorremos o arquivo linha a linha incluindo a linha na página PDF.

No código definimos X com sendo igual a 10 pixels a partir da esquerda e Y definido como yPonto e assim após cada linha yPonto será incrementado de 20 pixels (yPonto=yPonto+20), obtendo assim um bom espaçamento entre as linhas.

O código já esta todo comentado então é só executar, e, ao clicar no botão OK a linha de código - Process.Start(txtDestino.Text) - será executada, e o arquivo PDF gerado será exibido conforme abaixo:

Na continuação deste artigo eu vou mostrar como imprimir arquivos PDF.

Pegue o projeto completo aqui:  VBNET_Gerando_PDF3.zip (sem as referências)

Jesus respondeu, e disse-lhe: Porque te disse: Vi-te debaixo da figueira, crês ? Coisas maiores do que estas verás.
E disse-lhe: Na verdade, na verdade vos digo que daqui em diante vereis o céu aberto, e os anjos de Deus subindo e descendo sobre o Filho do homem.

João 1:50,51

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti