Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Como usar DocToText em C++Builder

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como usar DocToText em C++Builder Responder citando

Hola amigos. Necesito un código que extraiga el texto de un archivo doc, docx, xls, pdf, etc. Encontré una biblioteca de C++ (DocToText) que hace todo eso y más. El problema es que no tengo ni idea de cómo usarlo. Está más allá de mi conocimiento. ¿Me puedes ayudar?
El enlace de descarga:

http://silvercoders.com/en/products/doctotext/

Muchas gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Basado en el ejemplo que viene para VisualC he preparado uno para BCB5 enlazando de forma dinámica la dll doctotext.dll ya que no es posible un enlace estático usando implib

Código:

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

#include "doctotext_c_api.h"
#include <conio.h>
#include <time.h>

//---------------------------------------------------------------------------
// Preparando el enlace dinámico de doctotext.dll
#include <Windows.h>
#define LoadDllFunc(n)  P##n n = (P##n) GetProcAddress(hLib, #n);
// Las definiciones de los punteros a las funciones funciones usadas doctotext_c_api.h
typedef DocToTextExtractorParams* (DOCTOTEXT_CALL *Pdoctotext_create_extractor_params)();
typedef DocToTextFormattingStyle* (DOCTOTEXT_CALL *Pdoctotext_create_formatting_style)();
typedef void (DOCTOTEXT_CALL *Pdoctotext_formatting_style_set_url_style)(DocToTextFormattingStyle* formatting_style, doctotext_url_style url_style);
typedef void (DOCTOTEXT_CALL *Pdoctotext_extractor_params_set_verbose_logging)(DocToTextExtractorParams* extractor_params, int verbose);
typedef void (DOCTOTEXT_CALL *Pdoctotext_extractor_params_set_formatting_style)(DocToTextExtractorParams* extractor_params, DocToTextFormattingStyle* formatting_style);
typedef DocToTextExtractedData* (DOCTOTEXT_CALL *Pdoctotext_process_file)(const char* file_name, DocToTextExtractorParams* extractor_params, DocToTextException** exception);
typedef const char* (DOCTOTEXT_CALL *Pdoctotext_extracted_data_get_text)(DocToTextExtractedData* extracted_data);
typedef DocToTextMetadata* (DOCTOTEXT_CALL *Pdoctotext_extract_metadata)(const char* file_name, DocToTextExtractorParams* extractor_params, DocToTextException** exception);
typedef void (DOCTOTEXT_CALL *Pdoctotext_free_extracted_data)(DocToTextExtractedData* extracted_data);
typedef void (DOCTOTEXT_CALL *Pdoctotext_free_extractor_params)(DocToTextExtractorParams* extractor_params);
typedef void (DOCTOTEXT_CALL *Pdoctotext_free_formatting_style)(DocToTextFormattingStyle* formatting_style);
typedef const char* (DOCTOTEXT_CALL *Pdoctotext_metadata_author)(DocToTextMetadata* metadata);
typedef const struct tm* (DOCTOTEXT_CALL *Pdoctotext_metadata_creation_date)(DocToTextMetadata* metadata);
typedef DocToTextVariant* (DOCTOTEXT_CALL *Pdoctotext_metadata_get_field)(DocToTextMetadata* metadata, const char* key);
typedef const char* (DOCTOTEXT_CALL *Pdoctotext_variant_get_string)(DocToTextVariant* variant);

// Cargando la librería
HINSTANCE hLib = LoadLibrary("doctotext.dll");


//---------------------------------------------------------------------------
// La función main recibe como parámetro al documento a tratar
int main(int argc, char * argv[])
{
  // Primero importamos las funciones
  LoadDllFunc(doctotext_create_extractor_params);
  LoadDllFunc(doctotext_create_formatting_style);
  LoadDllFunc(doctotext_formatting_style_set_url_style);
  LoadDllFunc(doctotext_extractor_params_set_verbose_logging);
  LoadDllFunc(doctotext_extractor_params_set_formatting_style);
  LoadDllFunc(doctotext_process_file);
  LoadDllFunc(doctotext_extracted_data_get_text);
  LoadDllFunc(doctotext_extract_metadata);
  LoadDllFunc(doctotext_free_extracted_data);
  LoadDllFunc(doctotext_free_extractor_params);
  LoadDllFunc(doctotext_free_formatting_style);
  LoadDllFunc(doctotext_metadata_author);
  LoadDllFunc(doctotext_metadata_creation_date);
  LoadDllFunc(doctotext_metadata_get_field);
  LoadDllFunc(doctotext_variant_get_string);

  //Create style and extractor params objects
  DocToTextExtractorParams* params = doctotext_create_extractor_params();
  DocToTextFormattingStyle* style = doctotext_create_formatting_style();
  doctotext_formatting_style_set_url_style(style, DOCTOTEXT_URL_STYLE_EXTENDED);
  doctotext_extractor_params_set_verbose_logging(params, 1);
  doctotext_extractor_params_set_formatting_style(params, style);

  //Extract text
  DocToTextExtractedData* data = doctotext_process_file(argv[1], params, NULL);
  //We should check if "data" is NULL!
  printf("\n\ndata: %s\n", doctotext_extracted_data_get_text(data));

  //Extract metadata
  DocToTextMetadata* metadata = doctotext_extract_metadata(argv[1], params, NULL);
  //We should check if "metadata" is NULL!
  printf("author: %s\n", doctotext_metadata_author(metadata));
  char date[64];
  //Check creation date
  strftime(date, 64, "%Y-%m-%d %H:%M:%S", doctotext_metadata_creation_date(metadata));
  printf("creation date: %s\n", doctotext_variant_get_string(doctotext_metadata_get_field(metadata, "creation date")));

  //We have to release those data:
  doctotext_free_extracted_data(data);
  doctotext_free_extractor_params(params);
  doctotext_free_formatting_style(style);
  getch();
  return 0;
}



Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola escafandra funciona perfecto tu ej. Very Happy
muchas gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.