 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Lun 01 Ago, 2022 5:48 pm Asunto: Como usar DocToText em C++Builder |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 03 Ago, 2022 10:07 pm Asunto: |
|
|
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 |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Jue 04 Ago, 2022 5:24 am Asunto: |
|
|
Hola escafandra funciona perfecto tu ej.
muchas gracias |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|