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!
- 1814 megtekintés
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!
- A hozzászóláshoz be kell jelentkezni
Ha az RTF-et próbálod, akkor ott mindig probléma szokott lenni a táblázatokkal, azt próbáld ki, ha pilot-olsz. Nekünk POI lett.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
é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:)
- A hozzászóláshoz be kell jelentkezni
É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.
- A hozzászóláshoz be kell jelentkezni
Ha nem sokat kell a word doksiban módosítani, akkor a körleveles megoldás nem játszhat? A wordbe adatmezőket beszúrva egy excelbe meg kirakni a módosuló értékeket lehet frappáns megoldás is...
- A hozzászóláshoz be kell jelentkezni
Kerülném, mivel az adatok egy Oracle adatbázisból jönnek. A feladat, hogy egy lépésben (kettőben) lehetőleg bármiféle kliens telepítés (ODBC stb.) nélkül menjen.
- A hozzászóláshoz be kell jelentkezni
Hmm. Érdekes lehet.
- A hozzászóláshoz be kell jelentkezni
+1 a DocX-re, Office 2000-ig visszamenőleg van plugin az MS részéről.
Mi is csináltunk táblázat generálós mókát ügyfélnek, ott az lett a megoldás, hogy felrakták a plugint (o2003-juk volt).
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
É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.
- A hozzászóláshoz be kell jelentkezni
Én is kerülném, ha lehetne, de nem lehet. Java mindenhol van a cél pedig az (is), hogy minél kevesebb komponensből álljon össze a dolog, ne kelljen még plusz dolgokat a kliensre felrakni.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni