Olá, bom dia.
Gostaria de tirar uma dúvida a respeito de como posso utilizar ComObjCreate("AcroExch.App") para retirar uma string de um pdf e colar em uma planilha.
A minha idéia é o script ler arquivo por arquivo em uma pasta contendo diversos PDF's, abrir cada pdf, retirar dados desse pdf e colar em uma planilha do excell.
Já possuo a versão premium do adobe acrobat, porém não consigo ter inicio de fazer essa verificação de string no arquivo.
Alguém pode me dar uma luz?
Duvida STRING PDF Topic is solved
Moderator: Gio
-
- Posts: 39
- Joined: 28 Jun 2020, 18:46
Re: Duvida STRING PDF
Uma forma que eu uso para ler strings de PDF é converter com o programa pdftotext.exe e então ler o arquivo gerado.
Cheguei até a fazer uma função para facilitar o processo.
Cheguei até a fazer uma função para facilitar o processo.
Code: Select all
; site para download e documentação https://www.xpdfreader.com/pdftotext-man.html
; Passe o caminho do arquivo para a função por exemplo
; texto := pdf2var("D:\Documentos\arquivo.pdf")
pdf2var(PdfPath) {
FileDelete, %A_Temp%\temp_pdf.txt
RunWait "D:\Documentos\Scripts\Outros\pdftotext.exe" -q "%PdfPath%" %A_Temp%\temp_pdf.txt, , hide
if (ErrorLevel != 0)
MsgBox, 48, Função pdf2var, Ocorreu um erro ao executar pdftotext.exe
FileRead, text, %A_Temp%\temp_pdf.txt ; Achei mais simples salvar o arquivo em uma pasta temporária para ler em seguida.
FileDelete, %A_Temp%\temp_pdf.txt
return text
}
-
- Posts: 95
- Joined: 13 Sep 2021, 06:08
Re: Duvida STRING PDF
Peço desculpas por minha ignorancia.
Mas como posso colocar isso na pratica?
Exemplo:
Queria tirar de um PDF alguns campos especificos e jogar para uma planilha, só que consiga fazer isso de forma massiva
Tenho 100 pdf's em uma pasta, ambos com semelhanças iguais, apenas os dados em alguns campos são diferentes, o meu objetivo é, fazer algum código ou alguma maneira do script abrir cada pdf, retirar os dados, jogar em uma planilha, e fazer isso até que todos os pdf's fossem tirados esses dados.
Mas como posso colocar isso na pratica?
Exemplo:
Queria tirar de um PDF alguns campos especificos e jogar para uma planilha, só que consiga fazer isso de forma massiva
Tenho 100 pdf's em uma pasta, ambos com semelhanças iguais, apenas os dados em alguns campos são diferentes, o meu objetivo é, fazer algum código ou alguma maneira do script abrir cada pdf, retirar os dados, jogar em uma planilha, e fazer isso até que todos os pdf's fossem tirados esses dados.
Re: Duvida STRING PDF
Bom dia Thalesduarte.
O PdftoText é um alicativo de linha de comando (controlável através do CMD, ou no caso do AutoHotkey, ComSpec) que transforma um arquivo .pdf em um arquivo .txt. Naturalmente, ele faz isso lendo todo o conteúdo textual do arquivo e escrevendo o arquivo de texto, descartando imagens e outros elementos não-textuais. Esse aplicativo é grátis e vem embutido em algumas distribuições do Linux, mas não é um aplicativo nativo no Windows. Mesmo assim, você pode instalá-lo através do aplicativo XPDF (quando você instala o XPDF, ele automaticamente instala o PdfTotext na sua máquina).
OBS: Conforme dito, eu já usei o pdftotext antes e considero ele um programa confiável, mas lembre-se que não nos responsabilizamos por nenhum aplicativo de terceiros (instale sempre por sua própria conta e risco).
Após instalar o pdftotext você pode usar ele para processar os arquivos pdf em arquivos txt, conforme mencionado, usando linhas de comando.
A ideia então é que seu aplicativo primeiro acione o pdftotext (usando RunWait, conforme o código do Pedro45_vs ou ComSpec) e depois acesse o arquivo de texto que ele criou (usando FileRead), lendo então o conteúdo deste arquivo. Logo, indiretamente você vai estar lendo o conteúdo textual do próprio arquivo pdf. Depois disso, o passo seguinte seria simplesmente usar comandos String ou RegExMatch() para isolar as informações desejadas.
Isso pode ser feito em um loop de arquivos, de modo a processar os 100 arquivos de maneira sequencial.
O PdftoText é um alicativo de linha de comando (controlável através do CMD, ou no caso do AutoHotkey, ComSpec) que transforma um arquivo .pdf em um arquivo .txt. Naturalmente, ele faz isso lendo todo o conteúdo textual do arquivo e escrevendo o arquivo de texto, descartando imagens e outros elementos não-textuais. Esse aplicativo é grátis e vem embutido em algumas distribuições do Linux, mas não é um aplicativo nativo no Windows. Mesmo assim, você pode instalá-lo através do aplicativo XPDF (quando você instala o XPDF, ele automaticamente instala o PdfTotext na sua máquina).
OBS: Conforme dito, eu já usei o pdftotext antes e considero ele um programa confiável, mas lembre-se que não nos responsabilizamos por nenhum aplicativo de terceiros (instale sempre por sua própria conta e risco).
Após instalar o pdftotext você pode usar ele para processar os arquivos pdf em arquivos txt, conforme mencionado, usando linhas de comando.
A ideia então é que seu aplicativo primeiro acione o pdftotext (usando RunWait, conforme o código do Pedro45_vs ou ComSpec) e depois acesse o arquivo de texto que ele criou (usando FileRead), lendo então o conteúdo deste arquivo. Logo, indiretamente você vai estar lendo o conteúdo textual do próprio arquivo pdf. Depois disso, o passo seguinte seria simplesmente usar comandos String ou RegExMatch() para isolar as informações desejadas.
Isso pode ser feito em um loop de arquivos, de modo a processar os 100 arquivos de maneira sequencial.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
-
- Posts: 95
- Joined: 13 Sep 2021, 06:08
Re: Duvida STRING PDF
Gio
Boa tarde.
Obrigado pelo retorno.
Gostaria de um auxilio no caso de regex.
Você indicaria algum tutorial de regex?
Consegui realizar a conversão, mas ainda não consegui entender como funciona o regex para captar os textos depois de uma condição
no meu formulario sempre terá
Valor total R$: 14.592,82
a unica coisa que irá ser alterada é só o valor.
como faço com regex para ele capturar somente depois do : ?
Boa tarde.
Obrigado pelo retorno.
Gostaria de um auxilio no caso de regex.
Você indicaria algum tutorial de regex?
Consegui realizar a conversão, mas ainda não consegui entender como funciona o regex para captar os textos depois de uma condição
no meu formulario sempre terá
Valor total R$: 14.592,82
a unica coisa que irá ser alterada é só o valor.
como faço com regex para ele capturar somente depois do : ?
Re: Duvida STRING PDF Topic is solved
Boa tarde Thalesduarte.
Você pode usar o guia rápido de RegEx se precisar criar uma RegEx.
Vou te dar um exemplo semelhante ao que você descreveu:
Exemplo de código Isolando qualquer quantidade de sequencias com o padrão desejado em um arquivo de texto que contém 3 valores:
Você pode usar o guia rápido de RegEx se precisar criar uma RegEx.
Vou te dar um exemplo semelhante ao que você descreveu:
Exemplo de código Isolando qualquer quantidade de sequencias com o padrão desejado em um arquivo de texto que contém 3 valores:
Code: Select all
#Persistent
; Primeiro vamos criar uma amostra de texto que contenha o padrão desejado repetido 3x.
Texto_inteiro =
(
arquivo de exemplo número 4
data: xx/xx/xxxx
empresa: abc materiais elétricos ltda
cliente: jonas
hora da compra: 15:59
produto: escova de dentes amarela com tufo azul modelo dinossauros
unidade: caixa
quantidade: 2
valor unitário R$: 7.296,41
Valor total R$: 14.592,82
cliente: maria
hora da compra: 16:36
produto: régua escolar 30cm
unidade: caixa
quantidade: 3
valor unitário R$: 8.726,40
Valor total R$: 26.179,20
cliente: claudio
hora da compra: 16:50
produto: unidades de cd-rom antigos
unidade: caixa
quantidade: 2
valor unitário R$: 3.710,40
Valor total R$: 7.420,80
)
; A rotina para buscar os correspondentes-de-padrão desejados inicia aqui.
Total_De_Resultados := 0 ; Iniciamos uma variável de contagem
While (StrLen(Texto_inteiro) > 0) ; E depois um loop que roda enquanto o texto ainda existe (Lógica: o texto será cortado até a posição + 14 sempre que um valor for encontrado para que o loop reinicie. naturalmente, uma hora não haverá mais padrões, ponto onde terminaremos o loop)
{
Posicao := RegExMatch(Texto_inteiro, "Valor\stotal\sR\$:\s\d{1,3}\.\d{1,3},\d{1,2}", Resultado) ; Nosso padrão será: "Valor" seguido de um espaço, seguido de "total", seguido de outro espaço, seguido de "R$", seguido de dois pontos, seguido de um espaço, seguido de uma sequência de 1 a 3 dígitos numéricos, seguido de um ponto, seguido de uma sequência de 1 a 3 dígitos numéricos, seguido de uma vírgula, seguido de uma sequência de 1 a 2 dígitos numéricos. Isso vai pegar números até 999.999,99
If !(Posicao > 0) ; Se a posição NÃO for maior que zero, então o comando não encontrou o padrão.
{
Posicao := RegExMatch(Texto_inteiro, "Valor\stotal\sR\$:\s\d{1,3},\d{1,2}", Resultado) ; Se isso ocorreu, buscamos OUTRO padrão semelhante (números até 999,99).
If !(Posicao > 0) ; Se este padrão também não foi encontrado...
{
Break ; Terminamos o loop.
}
}
Resultado_%A_index% := Resultado ; Este código executa obviamente se algum padrão acima foi encontrado. Primeiro, salva o correspondete-de-padrão encontrado.
Total_De_Resultados++ ; Depois, aumenta o contagem de resultados.
QUANTIDADE_DE_CARACTERES_A_REMOVER := Posicao + 14 ; Agora conta a posição do correspondente-de-padrão encontrado + 14 ("valor total R$" contém 14 caracteres, e faz parte do padrão. O objetivo é cortar até esses caracteres para que a próxima busca não encontra o mesmo correspondente-de-padrão)
StringTrimLeft, Texto_inteiro, Texto_inteiro, %QUANTIDADE_DE_CARACTERES_A_REMOVER% ; Por fim, remove caracteres do texto original correspondente à posição do correspondente-de-padrão encontrado anteriormente para que o mesmo correspondente-de-padrão não seja encontrado de novo.
}
Loop % Total_De_Resultados ; Por fim fazemos um loop com a contagem de resultados.
{
msgbox % Resultado_%A_index% ; e exibimos os resultados encontrados.
}
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
-
- Posts: 95
- Joined: 13 Sep 2021, 06:08
Re: Duvida STRING PDF
Gio, obrigado pelo empenho e ajuda no conhecimento.
Confesso que após sua orientação eu dei uma pesquisada e acabei conseguindo o resultado que estava buscando.
De qualquer forma, o exemplo que você me mostrou agora, me serviu bastante para conhecimentos e como aplicar o uso do Regex.
Mais uma vez, agradeço pela ajuda.
Encontrei um site chamado https://regex101.com/
Com ele eu consegui realizar alguns experimentos com regex e consegui o resultado esperado.
Grato pela atenção!
Atenciosamente,
Thales
Confesso que após sua orientação eu dei uma pesquisada e acabei conseguindo o resultado que estava buscando.
De qualquer forma, o exemplo que você me mostrou agora, me serviu bastante para conhecimentos e como aplicar o uso do Regex.
Mais uma vez, agradeço pela ajuda.
Encontrei um site chamado https://regex101.com/
Com ele eu consegui realizar alguns experimentos com regex e consegui o resultado esperado.
Grato pela atenção!
Atenciosamente,
Thales