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
:
Visual Studio Community 2013 (A versão 2015 já esta disponível na versão RC)
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:
1 label - Informe o arquivo Texto
1 TextBox - txtArquivoTexto
1 Button - btnProcurar
1 Label - Informe o destino
1 TextBox - txtDestino
1 Button - btnProcurarPasta
1 Button - btnGerarPDF
Disponha os controles no formulário conforme o leiaute da figura abaixo:
Vamos começar definindo os namespaces usados no formulário:
Imports
System.SecurityImports
System.IOImports
PdfSharpImports
PdfSharp.DrawingImports
PdfSharp.PdfA 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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Um leitor de arquivos no formato PDF - Macoratti ...