Abrir un archivo de word!!!

Selvas
26 de Noviembre del 2003
Hola a todos.

La inquietud consiste en saber si alguien a podido abrir un archivo de word y este poderle escribir y leer informacion.

yeahyeahyeah
26 de Noviembre del 2003
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 :)


RaulC
26 de Noviembre del 2003
A mi si que me interesa, si me puedes enviar algo de codigo... o bien por aki o por mail, gracias de antemano!

xelito
26 de Noviembre del 2003
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

yeahyeahyeah
26 de Noviembre del 2003
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

xelito
26 de Noviembre del 2003


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

xelito
26 de Noviembre del 2003
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";

yeahyeahyeah
26 de Noviembre del 2003
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