Olá @Victor85, existe algumas formas de resolver sua demanda, comentando rápido sobre seria armazenar esses documentos em um banco de dados de forma binaria onde te traria uma certa segurança e acessibilidade.
Um outro método seria capturar diretamente no diretorio onde está aramazenado que pela descrição que você fez seria esse seu caso, baseado nisto realizei a seguinte solução que talvez possa te ajudar…
Objetos no servidor
- Crie um
InternalTag
no servidor, eu o nomiei de ReadDoc
, onde esse objeto irá receber do local onde realizado o gatilho um valor (string) usado como chave no código a seguir onde faz referência ao caminho do documento desejado.
- Crie um
InternalTag
no servidor, eu o nomiei de ResponseDoc
, onde esse objeto irá receber a resposta do script de busca pelo documento, onde os valores podem ser um Array
indicando erro ou um objeto do tipo File
indicando sucesso.
Script localizado no evento criado pelo usuário com expressão Value
com a condição de ocorrência sendo a sua alteração de valor
Sub ReadDoc_Open()
Dim objPDF
Dim objFSO
Dim objResponse
Dim dPath
Dim sPath
' Verificando se o valor inputado e correto
If Value = "" Then Exit Sub
' Capturando a tag de resposta
Set objResponse = Parent.Item("ResponseDoc")
' Criando dicionario para armazenar o caminho dos arquivos
Set dPath = CreateObject("Scripting.Dictionary")
' Criando objeto para tratar os arquivos
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Atribuindo caminho dos arquivos com relacao entre e chave e valor no dicionario
' Para cada novo arquivo insira a Chave, Caminho
dPath.Add "Teste", "D:\Curriculo\Afonso Calado Silva.pdf"
' Verificando se exite o arquivo solicitado
If (dPath.Exists(Value)) Then
' Capturando caminho do arquivo
sPath = dPath.Item(Value)
If Not (objFSO.FileExists(sPath)) Then
Application.Trace "Não encontrou o arquivo: " &_
sPath
objResponse.Value = Array("Nop")
Exit Sub
End if
' Capturando o arquivo
Set objPDF = objFSO.GetFile(sPath)
Set objResponse.Value = objPDF
Else
objResponse.Value = Array("Nop")
Exit Sub
End If
End Sub
Objeto no viewer
Script inserido no objeto de gatilho, no caso apresentado apenas um simples botão
Sub CommandButton1_Click()
Dim objReadPDF
Dim objResponsePDF
' Capturando tag de gatilho
Set objReadPDF = Application.GetObject("Dados.ReadDoc")
' Passando o valor chave
objReadPDF.Value = "Teste"
' Capturando tag de resposta
Set objResponsePDF = Application.GetObject("Dados.ResponseDoc")
' Acionando a rotina
OpenDoc objResponsePDF.Value
End Sub
'
' Cria o documento e apresenta em tela
' @Params {DocPDF} Documento PDF a ser visualizado
'
Private Sub OpenDoc( DocPDF )
Dim objFSO
Dim objShell
Dim sPathDoc
Dim sPathDirectory
Dim sNameDoc
Dim sTypeDoc
Dim sReadDoc
Dim bFlagExistDoc
Dim objNewDOC
' Verificando se o parametro esta corrreo
If (IsArray(DocPDF)) Then
Exit Sub
Else
' TODO: tratamento para arquivo nao encontrado
End If
' Criando objeto de documentos
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Caminho do documento a ser verificado a existencia
sPathDirectory = "C:\Mov\"
sPathDoc = sPathDirectory & DocPDF.Name
' Capturando nome e tipo do documento
sNameDoc = Split(DocPDF.Name,".")(0)
sTypeDoc = Iif(Instr(1, DocPDF.Type, "PDF", 1) > 0, ".pdf", Iif(Instr(1, DocPDF.Type, "Texto", 1) > 0,".txt",""))
' Valida se o tipo do documento e PDF ou TXT
If (sTypeDoc = "") Then
Exit Sub
Else
' TODO: tratamento para tipo nao encontrado
End If
If ( Not objFSO.FileExists(sPathDoc) ) Then
' Alterando o nome do documento a ser cirado
' iniciamente sempre sendo criado como txt
sPathDoc = sPathDirectory & sNameDoc & ".txt"
' Criando o documento para no diretorio
Set objNewDOC = objFSO.CreateTextFile(sPathDoc, True)
' Realiza a leitura completa do documento
sReadDoc = DocPDF.OpenAsTextStream(1,0).ReadAll
' Transfere o valor para o novo documento criado
objNewDOC.Write sReadDoc
' Alterando o formato do documento
If ( sTypeDoc = ".pdf" ) Then
Set objNewDOC = objFSO.GetFile(sPathDoc)
' Atualizando a extensao para pdf
objNewDOC.Name = sNameDoc & ".pdf"
' Atualizando o caminho do documento com o novo formato
sPathDoc = sPathDirectory & objNewDOC.Name
End If
' Verificando a movimentacao com sucesso do arquivo
If ( Not objFSO.FileExists(sPathDoc) ) Then
Msgbox " Erro na movimentacao para o diretorio: " &_
sPathDoc, vbInformation, "Atenção"
Exit Sub
End If
End If
Set objShell = CreateObject("WScript.Shell")
objShell.Run """" & sPathDoc & """"
End Sub
Observações
- O script trata com os documento PDF/Txt apenas com o formato ASCII.
- O valor de chave está fixo no código, seria ideal isto ser inputado e de preferência com valores definido, como uma lista sem opção de digitação.
- Leve em consideração que está sendo trafegado entre o cliente e o servidor um documento com alguns Kb ou Mb, então a depender de sua arquitetura (cliente/servidor) isso pode ser um pouco custoso, rodando em uma PAN é tudo muito lindo!