Abrir un archivo de word!!!
Hola a todos.
La inquietud consiste en saber si alguien a podido abrir un archivo de word y este poderle escribir y leer informacion.
La inquietud consiste en saber si alguien a podido abrir un archivo de word y este poderle escribir y leer informacion.
Si es posible mediante JNI, haciendo una licbreria en C++ que utilize objetos de word, si te interesa, puedo pegar código aqui.
Podrias manipular el documento completamente, pero es un poco petardo :)
Podrias manipular el documento completamente, pero es un poco petardo :)
A mi si que me interesa, si me puedes enviar algo de codigo... o bien por aki o por mail, gracias de antemano!
Ah! se me olvidaba, dependiendo de la version de Word, hay que utilizar unas versiones de la libreria de word u otras (vb1ext.dll... ), lo digo, porque dependiendo de las versiones cambia su nombre :(.
de todas formas hay documentacion en internet
de todas formas hay documentacion en internet
Ah! se me olvidaba, dependiendo de la version de Word, hay que utilizar unas versiones de la libreria de word u otras (vb1ext.dll... ), lo digo, porque dependiendo de las versiones cambia su nombre :(.
de todas formas hay documentacion en internet
de todas formas hay documentacion en internet
Es un ejemplo que imprime desde word 97 un archivo pasado como paramtro, con cierto tamaño de fuente, y parametrillos pasados desde java.
Es importante leer un poquito como va JNI para entender bien el ejemplo.
Repecto al codigo C++ una vez visto un poquillo, es relativamente sencillo.
Suerte.
Espero que os sirva
2º CODIGO C++
#pragma warning (disable:4146)
#import <mso97.dll>
#pragma warning (default:4146)
# import <vbeext1.olb>
#import <msword8.olb> rename("ExitWindows", "WordExitWindows")
#include <jni.h>
#include <stdlib.h>
#include "PrintReport.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct StartOle
{
StartOle() { CoInitialize(NULL); }
~StartOle() { CoUninitialize();}
} _inst_StartOle;
BOOL DoEvents()
{
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message==WM_QUIT)
return FALSE;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return TRUE;
}
// Función exportada por JNI ---------------------------------------------------------------------------------
JNIEXPORT jboolean JNICALL Java_Clases_Print_PrintReport_fnPrintReport
(JNIEnv * env, jobject obj , jstring txt, jstring fontname, jfloat fontsize) {
const char *txt2=env->GetStringUTFChars(txt,0);
using namespace Word;
const float tam_fuente = fontsize;
const char *font_name = env->GetStringUTFChars(fontname,0);
try {
_ApplicationPtr app;
app.CreateInstance(L"word.application");
_DocumentPtr doc;
//Abrir la ruta pasada como parametro
doc = app->Documents->Open(&_variant_t(txt2));
doc->Activate();
app->put_Visible (VARIANT_TRUE);
RangePtr r;
app->ActiveDocument->PageSetup->PutOrientation (wdOrientLandscape);
//Elegir el tamaño y nombre de la fuente
r=doc->Range();
r->Font->Size = tam_fuente;
r->Font->Name = font_name;
//Imprimir
doc->PrintOut();
doc->Save();
return true;
} catch(_com_error &e) {
//En caso de error pasar el control de la impresion al código Java
return false;
}
char *p="ok";
#pragma warning (disable:4146)
#import <mso97.dll>
#pragma warning (default:4146)
# import <vbeext1.olb>
#import <msword8.olb> rename("ExitWindows", "WordExitWindows")
#include <jni.h>
#include <stdlib.h>
#include "PrintReport.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct StartOle
{
StartOle() { CoInitialize(NULL); }
~StartOle() { CoUninitialize();}
} _inst_StartOle;
BOOL DoEvents()
{
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message==WM_QUIT)
return FALSE;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return TRUE;
}
// Función exportada por JNI ---------------------------------------------------------------------------------
JNIEXPORT jboolean JNICALL Java_Clases_Print_PrintReport_fnPrintReport
(JNIEnv * env, jobject obj , jstring txt, jstring fontname, jfloat fontsize) {
const char *txt2=env->GetStringUTFChars(txt,0);
using namespace Word;
const float tam_fuente = fontsize;
const char *font_name = env->GetStringUTFChars(fontname,0);
try {
_ApplicationPtr app;
app.CreateInstance(L"word.application");
_DocumentPtr doc;
//Abrir la ruta pasada como parametro
doc = app->Documents->Open(&_variant_t(txt2));
doc->Activate();
app->put_Visible (VARIANT_TRUE);
RangePtr r;
app->ActiveDocument->PageSetup->PutOrientation (wdOrientLandscape);
//Elegir el tamaño y nombre de la fuente
r=doc->Range();
r->Font->Size = tam_fuente;
r->Font->Name = font_name;
//Imprimir
doc->PrintOut();
doc->Save();
return true;
} catch(_com_error &e) {
//En caso de error pasar el control de la impresion al código Java
return false;
}
char *p="ok";
Os mando un ejemplo de como seria la impresion en word:
1º CODIGO JAVA
package imprimir;
import java.io.*;
public class PrintReport {
private String fichero ="";
private String NombreFuente = "";
private float TamFuente = 0;
//Se le pasa la ruta de la DLL
public PrintReport(String ruta ) {
System.load (ruta);
}
public native boolean fnPrintReport (String FileName , String FontName , float FontSize) ;
} //fin Clase PrintReport
1º CODIGO JAVA
package imprimir;
import java.io.*;
public class PrintReport {
private String fichero ="";
private String NombreFuente = "";
private float TamFuente = 0;
//Se le pasa la ruta de la DLL
public PrintReport(String ruta ) {
System.load (ruta);
}
public native boolean fnPrintReport (String FileName , String FontName , float FontSize) ;
} //fin Clase PrintReport