segunda-feira, 22 de agosto de 2011

Copiando texto de arquivos PDF

Esta é para tirar poeira do blog, pois faz um bom tempo que não colocado dicas aqui...
Aliás, o blog que inicialmente era focado no Excel, agora praticamente virou blog de VBA.
Bem, pelo menos espero que mesmo assim continue sendo útil.

Vamos ao código de hoje.
O problema:
Precisava abrir muitos documentos PDF e selecionar apenas alguns campos para poder trabalhar com eles numa tabela do Access.
Após uma pesquisa pela internet, verifiquei que existe pouca coisa sobre automação do Adobe via VBA que pudesse me ajudar.
Automação com o Internet Explorer seria o óbvio, porém não existe "Select All" nem "Copy".
Parti para a solução que não considero a melhor, porém foi o que me quebrou o galho e espero que ajude aqueles que visitarem este blog.
Detalhe importante: os dados são copiados para um arquivo TXT e a parte de tratamento depende do documento que está sendo aberto e copiado, por isso não vou detalhar para não complicar.
Outro detalhe importante: marcar a referência Microsoft Forms 2.0 Object Library.
Se não estiver na lista das referências, procurar pelo arquivo FM20.dll que geralmente está em C:\Windows\System32\.

;-)


Option Compare Database
Option Explicit

Dim ie As Object
Dim temp_area As New DataObject
Dim arquivo As String

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub Pausa(ByVal segundos As Single)
Call Sleep(Int(segundos * 1000#))
End Sub

'Código teste para copia de texto de arquivo PDF

Sub IExplorer()

Open CurrentProject.Path & "\dados.txt" For Output As #1

Set ie = CreateObject("internetexplorer.application")
ie.Visible = True

arquivo = Dir(CurrentProject.Path & "\*.pdf")
Do While arquivo <> ""
ie.navigate CurrentProject.Path & "\" & arquivo
Do While ie.busy
DoEvents
Loop

Pausa 2
SendKeys "%E", True
SendKeys "{down}", True
SendKeys "{down}", True
SendKeys "{down}", True
Pausa 0.5
SendKeys "{ENTER}", True 'Selecionar tudo
SendKeys "%E", True
SendKeys "{down}", True
Pausa 0.5
SendKeys "{ENTER}", True 'Copiar

temp_area.GetFromClipboard
Print #1, temp_area.GetText
Print #1, "---------------------"

Debug.Print arquivo
arquivo = Dir

Loop

Close #1
ie.Quit
Set ie = Nothing

End Sub

Pesquisar este blog

Arquivo do blog

Quem sou eu

Minha foto
Administrador de Empresas/Técnico em Processamento de Dados. Microsoft Office User Specialist - Excel Proficient. Pós-graduado em Business Intelligence.