Uso de un .pdf desde VB6

Te paso a contar el problema que tengo: hice un .pdf con determinados campos para que llenen los clientes. Se lo envío por mail y al reenviármelos debo levantar los datos que completaron en esos campos con el programa de gestión (en VB6) que desarrollé, para pasar esos datos a la base.
El tema es que nunca trabaje con .pdf y no tengo idea de como conectarme a este archivo por el VB6. Si me podes tirar un ejemplo de código o donde puede haber ( no encontré nada )

5 Respuestas

Respuesta
1
Mi Nick es hjmelgar.
Mi correo es [email protected]
Envíame el *.pdf y si puedes la BDD (vacía, es decir que me interesa la estructura)
No he contestado muchas preguntas, porque nadie me ha preguntado.
Antes disponía de mayor tiempo, así que contestaré tus preguntas y hasta creo que podré hacerte el ejemplo, pero en el futuro no se si podré hacerlo ...
La pregunta es muy interesante y personalmente, nunca vi un caso como el que tu planteas.
Si no he entendido mal, estás utilizando un formulario pre-diseñado en formato *.pdf para recolectar datos vía e-mail de determinados usuarios, que luegos quieres convertir en datos para cargar en una base de datos ¿correcto?
Bien. Si ese formulario es fijo y lo único que cambian son los datos remitidos te diré lo que yo haría.
Cualquier archivo puede ser considerado un archivo binario y abierto con la instrucción "Open"
Por ejemplo:
Open archivo_pdf For Binary Access Read Lock Read As #1
Examina con un editor hexadecimal (yo aún utilizo el viejísimo Xtree-Gold para D.O.S) el formulario pre-diseñado y obtiene la cadena binaria que delimitará los campos variables.
Una vez que hayas obtenido los delimitadores de datos en formato hexadecimal (por ejemplo: delimitador="&h4f" & "&hfe" & "Hf33", abres el archivo en formato de solo lectura como hemos visto y buscas con la función de Visual Basic
Instr
el lugar donde cada una de estas cadenas se encuentra.
por ejemplo:
Dim campo(16) ' si son 16 campos a "rellenar"
' a sería el *.pdf
' b sería el delimitador
For t = 1 To Len(a)
lugar(campo) = InStr(t, a, b, vbBinaryCompare)
If lugar(campo) = 0 Then Exit For
Next
Una vez obtenidas las direcciones donde se encuentran las cadenas de delimitación de los datos, recoger los mismos en cadenas es muy sencillo: utiliza la función mid(lugar, posición, longitud)
Lugar será la posición del delimitador anterior +1 donde buscarás ...
Posición será el lugar donde has ubicado cada delimitador,
Y longitud puede ser la longitud esperada por ti (si has previsto campos de longitud fija eso será mucho más fácil). Si no tienen longitud fija deberás restar el lugar(actual) - lugar(anterior) y la diferencia entre estas dos direcciones, menos la extensión de los delimitadores te dará la longitud del campo examinado.
Luego conviertes todas esas cadenas en los datos esperados por los campos de la BDD.
Por ejemplo: si es una cadena
"30" la conviertes a Long si es el formato esperado, la convertirás con CLng(string)
Para ello podrías hacer un formulario donde validar los datos o convertirlos y luego de agregar un registro a la BDD o buscar el Registro a actualizar haces una tarea del tipo bdd. Recordset.update
Eso sería la teoría para construir un "interfase" entre *.pdf y *.mdb o los datos que fueran.
No conozco OCX alguna que haga esta tarea, ni la he visto en foro alguno.
Disculpa lo genérico de mi respuesta, pero tu pregunta también ha sido genérica.
Si no sabes como obtener los delimitadores de un archivo que sirve como fuente de BDD, envíame el formulario *.pdf y te devolveré los delimitadores en formato hexadecimal.
Respuesta
1
Tendrías que utilizar el acrobat writer o algún otro programa similar, el writer te permite utilizar apis, dlls y ocxs de manera integral con visual basic, no lo he hecho, pero en días pasados, creo en enero un compañero del foro que pregunto algo similar anexo un segmento de código para trabajar con el writer.
La encontré el día ocho de febrero del presente, te anexo todo lo que platicamos:
Extraer texto desde pdf
Hola, gracias por dedicarme tu tiempo!
Llevo cierto tiempo intentando extraer el texto de un fichero pdf desde una aplicación que me estoy haciendo en VB.
También he necesitado hacerlo de excel y no he tenido problema, pero una vez que cargo la referencia (acrobat. Tlb) ahora no sé como seguir. He intentado varias cosas pero me dan error.
Una vez que tenga el texto en variables o en listas o en lo que sea, ya sabré seguir. Mi problema es acceder al docemento pdf desde VB.
Espero haberme explicado con claridad.
Un saludo
Re: Extraer texto desde pdf
Con el objeto del acrobat reader los puedes leer, pero no lo puedes ver línea por línea como lo quieres, para eso tendrías que tener instalado el acrobat writer.
Checa en la página de acrobat para que veas que otras posibilidades tienes.
Saludos
David Enciso
Extraer texto desde pdf
Hola David, gracias por responder. Tengo instalado el writer y puedo modificar los pdf desde él, pero lo que yo quiero es actualizar mis variables en VB desde texto que se encuentra en campos de pdf.
Hasta ahora he conseguido abrirlo, pero cuando intento contar los campos que tiene me dice que cero:
fcounts= Fields.Count
y cuando intento ir campo por campo:
For Each Field In Fields
siempre se sale del For porque Field es cero.
Aquí te mando lo que tengo hasta ahora. Te agradecería que lo probaras y a ver si averiguas una manera de explorar los campos de texto. Un saludo y gracias por tu tiempo.
Sub leer_pdf()
Dim AcroApp As Acrobat.CAcroApp
Dim PDDoc As Acrobat.CAcroPDDoc
Dim AvDoc As Acrobat.CAcroAVDoc
Dim sFieldName As String
Dim Field As AFORMAUTLib.Field
Dim Fields As AFORMAUTLib.Fields
Dim AcroForm As AFORMAUTLib.AFormApp
Dim fcount As Long
Set AcroApp = CreateObject("AcroExch.App")
Set PDDoc = CreateObject("AcroExch.PDDoc")
Set AvDoc = CreateObject("AcroExch.AVDoc")
Set AcroForm = CreateObject("AFormAut.App")
If PDDoc.Open("C:\Mis documentos\seneca\domicilios.pdf") Then
AcroApp.Show
Set AvDoc = PDDoc.OpenAVDoc("")
' Set AcroForm = AFormAut.
Set Fields = AcroForm.Fields
fcount = Fields.Count
For Each Field In Fields
sFieldName = Field.Name
MsgBox sFieldName
Next Field
End If
AcroApp.Exit
Set PDDoc = Nothing
Set AcroApp = Nothing
Set AvDoc = Nothing
Set Field = Nothing
Set Fields = Nothing
Set AcroForm = Nothing
End Sub
Re: Extraer texto desde pdf
Lo veo bien, pero no hace falta referenciar la creación del objeto de donde esta tomando los nuevos objetos.
Ahora, lo que veo es que le indicas que abra el archivo pero al momento de ver el documento no se lo indicas, no será este el problema.
If PDDoc.Open("C:\Mis documentos\seneca\domicilios.pdf") Then
AcroApp.Show
Set AvDoc = PDDoc.OpenAVDoc("")
' Set AcroForm = AFormAut.
Set Fields = AcroForm.Fields
Saludos
David Enciso
Extraer texto desde pdf
No entiendo muy bien esto que me dices:
"Lo veo bien, pero no hace falta referenciar la creación del objeto de donde esta tomando los nuevos objetos."
Probaré lo otro queme dices, que creo que quieres decir que lo abra y después haga lo de "For Each Fields..." ¿no? Creo que eso es lo que hago, ya que para asegurarme de que estaba abierto hago que me lo muestre: "AcroApp.Show".
Bueno, no te molesto más. Gracias por todo y si se te ocurre la solución o pruebas y el código y lo modificas de manera que te funciona, te agradecería que me lo comunicaras en tu siguiente mensaje.
Si no lo conseguimos, pues nada. Gracias igualmente. Cerraré la pregunta tras tu próxima respuesta. Un saludo
Re: Extraer texto desde pdf
No puedo probar el código porque no tengo el acrobat writer, pero no veo como vas relacionando los objetos, ya que son herencias unos de los otros, la aplicación se hereda hacia los demás objetos.
Saludos
David Enciso
Pregunta finalizada. Valoración: 4.
Yo tampoco he conseguido nada. Este código lo copié de una página que aseguraba que funcionaba, pero no sé como... No tengo conocimientos suficientes como para saber donde está el error.
Respuesta
1
Siento decirte que VB6 no puede manejar directamente archivos PDF, por lo que deberás recurrir a controles comerciales. Si introduces las palabras PDF OCX en tu buscador de web (google, etc) podrás encontrarlos.
Respuesta
1
Desafortunadamente yo no he trabajado lo que tu estas intentando hacer.
No puedo ayudarte
Respuesta
Por ahora lo que he encontrado de información es la siguiente url:
http://www.vbfrance.com/gma/ado
Es en francés...
También he visto que comentan que hace falta instalar una dll, pero no he visto cual es...
Te voy informando...
Espero, por favor, que me amplíes la respuesta, ya que busqué en esa página, y no encontré nada. Obviamente, mi francés es inexistente.
Gracias
Pues eso es lo único que hemos encontrado al respecto... lo sentimos
Pues si no nos quieres preguntar nada más, has de finalizar y valorarnos... sino no nos puede preguntar más gente..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas