.doc generálás sablon alapján

Fórumok

Hello,

A feladatom az lenne, hogy feldolgozzak MS Word .doc sablonokat és az abban lévő konstansokat kicseréljem egy megfelelő értékre és ebből készítsek egy másik .doc fájlt. Fontos követelmény hogy office 2000-től lehetőleg 2007-ig működjön a megoldás. .doc kell, xml, html, pdf nem játszik.

A versenyzők jelenleg:

- apache-poi
- jacob

Érdekelne, hogy ti hogy oldanátok (oldjátok) meg ?
c/s. Kliensek kizárólag Win-ek. Fizetős megoldások nem játszanak.

Köszönöm!

Hozzászólások

doc elegge binaris cucc, ha megfelel az rtf abban siman meglehet oldani: eleg egy str_repace("%EZTCSERELNI%', $info, $template)

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Eddig nem találtam sok hasznos doksit, ami ezt valósítja meg. A következőt dobáltam össze csak hogy lássam a működést.

package docman;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.ListData;
import org.apache.poi.hwpf.model.ListLevel;
import org.apache.poi.hwpf.model.ListTables;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Main {

public static void main(String[] args) {

String filename = "f:\\ber2001\\str\\a.doc";
String filename1 = "f:\\ber2001\\str\\c.doc";

try {

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filename));
FileOutputStream out = new FileOutputStream(new File(filename1));

HWPFDocument doc = new HWPFDocument(fs);
Range range = doc.getRange();
range.replaceText("{NEV}", "Nevem");
System.out.println(range.text());
fs.writeFilesystem(out);
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}

A gond az, hogyha fs.writeFilesystem-el írom az output fájlt, akkor az eredetit írja ki és nem amiben lecseréltem, amit le szerettem volna.
Ha doc.write-al írom, akkor megvan amit szeretnék, de a word2000-em elhalálozik, amikor meg akarom nyitni.

én próbálkoztam ilyennel egy darabig, de nem sikerült minden szempontból elfogadható megoldást találni. a poi sem teljesen hibátlan. úgyhogy én olyan cuccot használok, amit te kizártál a felsorolásból:)

Én a .docx formátumot javaslom. Egyszerű XML file-ok ZIP-el csomagolva, tömörítve. Ha szükséges, feltelepíted az MS Word kompatibilitási csomagot a régebbi word példányokra és azok is kezelik.

OOo-nak van java-ból használható api-ja, azzal ilyeneket csináltunk mi, szerintem a Word is dolgoztatható COM-om vagy mi a szöszön keresztül.
IMHO az XML fájl manipuláció a legelegánsabb, mert ahhoz még Word/OOo se kell.

jacob-al működik a mutatvány, de ez kb. az ole2-re hajaz nekem. Ha mást nem találok, akkor jó lesz...
Azért ne kíméljetek az ötletekkel.
Köszi.

Én eleve messziről kerülném a Wordöt ha nekem kéne egy hasonló feladatot megoldanom és én választhatnám az eszközöket, de ha te ragaszkodsz hozzá vagy rá vagy kényszerülve:

esetleg Perlt használnék, pontosabban a Windows-os ActivePerl disztribúciót, amivel gyárilag jár a Win32::OLE modul. Ezzel valószínűleg meg lehet oldani. A Perl előnye az is, hogy az adatbázishoz is egyszerűen tudsz vele csatlakozni.

Cserebe Java-bol nem tudsz COM-ot hivni direktbe, le kell programozni hozza a JNI interfeszt. Akkor mar inkabb csinald .Net-be, az is van minden kliensen, foleg a 2007-eseken. Oda egyszerubb interopot csinalni, es a C# majdnem Java.
--


Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

mivel csak a klienseket konkretizáltad, a szervert nem (apache-bol kiindulva ez generálna), ajánlom figyelmedbe ezt.
Ha nem is php-ban szeretnéd megoldani, a kód alapján már el tudsz kezdeni egy saját megoldást.