man kann in word dokumenten ja platzhalter verwenden. gibt es ein modul
für java, welches es ermöglicht, diese platzhalter zu finden, durch
eigenen text zu ersetzen und dann auszudrucken?
oder generell ansätze für module um mit word dokumenten in java zu arbeiten?
über google habe ich nur kommerzielle gefunden.
ciao,
elmar weber
---------------------------------------------------------------------
"Religion und Familie sind die beiden größten Feinde des Fortschritts."
(André Gide (1869 - 1951), französischer Schriftsteller)
Thomas
> oder generell ansätze für module um mit word dokumenten in java zu arbeiten?
Schau mal bei http://jakarta.apache.org/poi/
HDF (Horrible Document Format):
"...HDF is our port of the Microsoft Word 97 file format to pure Java. It
supports read and write capability. Please see the HDF project page for more
information. This component is in the early stages of design. Jump in! ..."
> man kann in word dokumenten ja platzhalter verwenden. gibt es ein modul
> für java, welches es ermöglicht, diese platzhalter zu finden, durch
> eigenen text zu ersetzen und dann auszudrucken?
Und als dritte Variante zu den beiden Vorgeschlagenen...
Du kannst auch einen sogenannten COM-Wrapper (wie z.B. jacoZoom von
http://www.infozoom.de, aber es gibt da auch andere) verwenden. Das
erfordert natürlich (keine Ahnung ob jacoZoom auch DCOM unterstützt, es
gäbe da aber auch Produkte) die Verwendung des Programms (oder
Programmteils) auf einem Windows-Rechner.
Naja, oder eben noch die vierte Variante: Du speicherst einfach deine
Word-Dokumente im RTF-Format (kann auch mit der Extension .doc sein, um
die Anwender nicht zu "verwirren") und liest das einfach (ist dann eine
normale ASCII-Datei in einem speziellen Format). Je nachdem was du
machst, kann das aber auch mal sehr fehleranfällig sein und Word
reagiert da sehr "seltsam", wenn da nur ein kleines fitzelchen Falsch ist...
Nico
[...]
>oder generell ansätze für module um mit word dokumenten in java zu arbeiten?
Siehe
<http://www.geocities.com/marcoschmidt.geo/java-document-libraries.html#word>.
Gruß,
Marco
--
Bitte nur in der Newsgroup antworten, nicht per Email!
de.comp.lang.java Homepage: http://www.dclj.de/
FAQ: http://www.faqs.org/faqs/de/comp-lang-java/faq/
Meine Java-Seiten: http://www.geocities.com/marcoschmidt.geo/java.html
>
> man kann in word dokumenten ja platzhalter verwenden. gibt es ein modul
> für java, welches es ermöglicht, diese platzhalter zu finden, durch
> eigenen text zu ersetzen und dann auszudrucken?
>
> oder generell ansätze für module um mit word dokumenten in java zu arbeiten?
>
> über google habe ich nur kommerzielle gefunden.
>
Hallo,
wenn es Word Dokumente im RTF Format sein dürfen.
Die <Platzhalter> in Deinen Template Dokumenten korespondieren mit den Namen
der Variablen aus der <FORM> die das Servlet ruft.
Viel Spass!
Roman
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.jdom.*;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.DocType;
import org.jdom.Comment;
import org.jdom.ProcessingInstruction;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class RTFTextGenerator extends HttpServlet {
/**
<p>Ersetzt in <code>source</code> enthaltenen Tags durch den Wert der
Name Wert Paare aus <code>values</code></p>
*/
private String parseTag (String source, Hashtable values) {
StringBuffer result = new StringBuffer();
int start = 0;
int end;
String tag;
String value;
while ((end = source.indexOf("<", start)) != -1) {
result.append(source.substring(start, end));
start = end + 1;
end = source.indexOf(">", start);
if (end == -1) { /
start--;
break;
}
tag = source.substring(start, end);
value = (String) values.get(tag);
if (value != null) {
result.append(value);
}
else {
result.append("<");
result.append(tag);
result.append(">");
}
start = end + 1;
}
if (start == 0) {
result.append(start);
return result.toString();
}
else {
return result.toString();
}
}
/**
<p>Konvertierung der Umlaute in RTF- konforme Codesequenzen.
<code>wert</code> - Umlaut zu konvertieren in RTF</p>
*/
private String convUmlaut(String wert) {
final String[] TAB = {
"\\" + "u196" + "\\" + "\'" + "80", //Ä
"\\" + "u228" + "\\" + "\'" + "8a", //ä
"\\" + "u214" + "\\" + "\'" + "85", //Ö
"\\" + "u246" + "\\" + "\'" + "9a", //ö
"\\" + "u220" + "\\" + "\'" + "86", //Ü
"\\" + "u252" + "\\" + "\'" + "9f", //ü
"\\" + "u223" + "\\" + "\'" + "a7", //ß
};
if (wert != null) {
StringBuffer buf = new StringBuffer();
for (int i=0; i < wert.length(); i++) {
char c = wert.charAt(i);
switch (c) {
case 'Ä': buf.append(TAB[0]); break;
case 'ä': buf.append(TAB[1]); break;
case 'Ö': buf.append(TAB[2]); break;
case 'ö': buf.append(TAB[3]); break;
case 'Ü': buf.append(TAB[4]); break;
case 'ü': buf.append(TAB[5]); break;
case 'ß': buf.append(TAB[6]); break;
default: buf.append(c);
}
}
return buf.toString();
}
else
return "";
}
public void service (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Variablen werden im Programmlauf teilweise überschrieben
String FileBase = "aw_template_doc";
String FileName = "test2.rtf";
DataInput lineIn;
Enumeration values = request.getParameterNames();
Hashtable parameter = new Hashtable();
String line;
String parsed;
String filename = "callYourAdmin";
Element t = null;
String MimeTyp = "text/rtf";
String template;
Document doc = null;
Element rootElement = null;
String fileoption;
String userID;
// HTTP Parameter lesen und Umlautkonvertiert in Hashtable <parameter>
ablegen
while(values.hasMoreElements()) {
String name = (String) values.nextElement();
String wert = convUmlaut(request.getParameter(name));
parameter.put(name, wert);
}
// aw_text.xml verarbeiten
userID = (String)parameter.get("uid");
fileoption = (String)parameter.get("FileOption");
try {
SAXBuilder b = new SAXBuilder();
doc = b.build(new File(getServletContext()
.getRealPath("/WEB-INF/texto2.xml")));
rootElement = doc.getRootElement();
}
catch (JDOMException j) {
log("aw_text:warn:JDOMException in getOptionList(): " +
j.getMessage());
}
// Ausgabe an die Zielanwendung
response.setContentType(MimeTyp);
response.setHeader("Content-disposition", "attachment;filename="
+filename);
PrintWriter out = response.getWriter();
try {
lineIn = new DataInputStream(new FileInputStream(FileBase +
System.getProperties()
.getProperty("file.separator")
+
FileName));
while ((line = lineIn.readLine()) != null) {
parsed = parseTag(line, parameter);
if (parsed.equals("0")) {
out.print(line);
}
else {
out.print(parsed);
}
}
}
catch (IOException e) {
log("RTFTextGenarator:warn:IOException bei Lesen Vorlagedokument: "
+ FileName + "Fehlermeldung: " + e.getMessage());
}
}
}