Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Eknuf am 17.05.06 - 13:10:52

Titel: PDFs erstellen mit iText Java-Klasse
Beitrag von: Eknuf am 17.05.06 - 13:10:52
Hallo Leute,

ich möchte aus Lotus Notes heraus, PDFs erzeugen. Dazu habe ich mir bereits den Source-Code von http://www.lowagie.com/iText/download.html heruntergeladen.

Nach dem Import in die Script-Bibliothek meiner LN-Datenbank treten beim kompillieren jede Menge Fehler auf.

Kann mir jemand einen Tip geben, wie ich die iText Klasse optimal einbinde.  Habe schon viel gehört, dass es ganz gut funktionieren soll. Nur leider habe ich nichts zur richtigen Verwendung unter Lotus Notes gefunden. Zudem ist mir nicht klar ob der Domino-Server noch irgendwie vorbereitet werden muss.

Es wäre super, wenn mir jemand helfen könnte. Ich bin schon ca. 1 Woche an dem Problem dran. Lasse mich auch nicht entmutigen, nur leider komme ich nicht richtig vorwärts.

Domino Server 6.5
Client 6.1 CF1

Cu Eknuf
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: flaite am 17.05.06 - 13:24:14
Source Code   ::) ;D
Du mußt die jars einbinden. (itext1-4.jar)
Auf meinem Rechner, würde ich die in dieses Verzeichnis tun.
C:\notes7\jvm\lib\ext
Such dir eins, das ähnlich aussieht und tue da einfach das jar rein. Danach mußt du den Client nochmal neu starten. Server ist so ähnlich, aber zum entwickeln erstmal noch nicht.

im faq hab ich was gefährliches mit xml-parser gelesen. Dies könnte bewirken, dass sich diese Library nur in Domino7 einbinden läßt. Bin mir da aber nicht sicher. Habs noch nicht ausprobiert.


Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: animate am 17.05.06 - 13:37:50
was du brauchst ist nicht der Sourcecode, sondern der kompilierte Code. Du willst das Teil ja vermutlich nicht selber kompilieren, sondern nur als Bibliothek nutzen.
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: flaite am 17.05.06 - 13:41:06
auf die idee, bin ich nachher auch gekommen.

UND:LEUTE. Es ist keine verdammt Hexerei, so etwas im Griff zu haben. Man sollte aber wirklich darum kümmern, sich ständig ein bischen mit den Grundlagen zu beschäftigen.
Hmm. Gentlemen.
Wer liest gerade die 1.400 (oder mehr) Bruce Eckel, Thinking in Java Edition 4?
Richtig. Der Typ, der sowieso schon die ganze Zeit die Fragen beantwortet.
Wer keine Lust auf Grundlagen hat, der kann vielleicht Robert Basic seine Blogging Schule besuchen und Blogger werden. Dann ist sowieso alles egal  :D
(bitte von keiner Seite irgendwie persönlich nehmen).

Gruß Axel
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: Eknuf am 17.05.06 - 16:37:41
Hallo ,

habe es so genau probiert.

Die Datei itext1-4.jar in C:\lotus\notes\jvm\lib\ kopiert. 

Dann einen Agenten geschrieben mit Beispiel von http://itextdocs.lowagie.com/examples/com/lowagie/examples/general/HelloWorld.java

Lotus gibt kein Fehler aus. Leider geht aber auch kein PDF auf.

Noch ein Tipp oder so? - Ich verzweifle langsam an mir selbst.

Cu Eknuf
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: animate am 17.05.06 - 17:18:37
Was erwartest du, dass dein Programm macht?

Du erzeugst mit dem gezeigten Beispiel eine Datei mit dem Namen "HelloWorld.pdf". Da du kein Verzeichnis angibst, kann ich nicht sagen, wo die Datei erzeugt wird. Vielleicht im Notes-Arbeitsverzeichnis?
Ich würde den Code so ändern, dass du die Datei in einem von dir vorgegebenen Verueichnis erzeugst und nach dem Ablauf deines Programms schaust du dann, ob die Datei da ist.

Falls du weitere Probleme hast ist es zwingend erforderlich, dass du sowohl den Quellcode deines Programms hier bringst, als auch die komplette Fehlermeldung, falls vorhanden. Problembeschreibungen wie "treten beim kompillieren jede Menge Fehler auf" sind nicht verwertbar.
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 17.05.06 - 17:46:09
ich habe da auch so meine Probleme.

Beim Kompilieren des Agenten sagt mir Notes

package com.lowagie.text not found

Ich denke, daß das auch bei Eknuf der Fall ist und der Agent deshalb nicht läuft.

Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: animate am 17.05.06 - 17:58:44
ich habe da auch so meine Probleme.

Beim Kompilieren des Agenten sagt mir Notes

package com.lowagie.text not found

Ich denke, daß das auch bei Eknuf der Fall ist und der Agent deshalb nicht läuft.



OK, eknuf sagte ja, dass er keine Fehlermeldung bekommt.
eknori, nur um sicher zu gehen, hast du die jar-Datei wie hier (http://www-12.lotus.com/ldd/doc/domino_notes/6.5.1/help65_designer.nsf/f4b82fbb75e942a6852566ac0037f284/31e7f240fec844d185256e000049558d?OpenDocument) unter Adding resource, class, or archive files to an agent  beschrieben, eingebunden?
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 17.05.06 - 18:17:07
@Thomas:

ich habe das .jar so wie Axel es beschrieben hat, einfach in das Notes\jvm\lib Verzeichnis kopiert und den Agentencode von der Webseite in einen neuen Agenten kopiert.
War eher ein Schnellschuss. Werde mir den Link einmal ansehen. Wenn ich dann noch Probleme habe, melde ich mich wieder. Momentan sind Mathe Hausaufgaben angesagt  :P
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 17.05.06 - 18:24:03
kaum macht man es richtig ...
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 17.05.06 - 18:28:14
pdf wird aber keins erzeugt; ok, muss ich mir mal weiter ansehen. Jetzt ist erst mal wieder Mathe angesagt ...

Due Debug console wirft übrigens ein gar nicht freundliches

Error loading Agent Base Class

aus
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: animate am 17.05.06 - 18:59:23
Da bin ich überfragt. Das müssen die Leute beantworten, die Notes mit Java nutzen. Ich kann gerne wieder bei der pdf-Bibliothek weiterhelfen.
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 17.05.06 - 19:05:37
macht nix; vielen Dank für deine Unterstützung

btw, jetzt wirft die Debug Console folgenden Fehler raus

Error loading Agent Class: HelloWorld
java.lang.ClassNotFoundException: HelloWorld
   at lotus.domino.AgentLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:494)
   at lotus.domino.AgentLoader.runAgent(Unknown Source)
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: flaite am 17.05.06 - 20:09:22
Das als Agent:
Funktioniert so nur auf Windows (Ginge auch anders, ich schlag später mal nach).
Das PDF landet in:
C:\\temp\\HelloWorld.pdf

Lokaler Java Agent mit Notes7.
Agent--> Auswahl im Menü Aktionen, Ziel: keines

Code
import lotus.domino.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.io.IOException;

public class JavaAgent extends AgentBase {

	public void NotesMain() {

		try {
			Session session = getSession();
			AgentContext agentContext = session.getAgentContext();
System.out.println("Hello World");

		// step 1: creation of a document-object
// NAMESPACE MUSS EXPLIZIT ANGEGEBEN WERDEN. 
		com.lowagie.text.Document document = new com.lowagie.text.Document();
		try {
			// step 2:
			// we create a writer that listens to the document
			// and directs a PDF-stream to a file
			// WINDOWS ONLY. ICH BIN MÜDE
			PdfWriter.getInstance(document,
					new FileOutputStream("C:\\temp\\HelloWorld.pdf"));

			// step 3: we open the document
			document.open();
			// step 4: we add a paragraph to the document
			document.add(new Paragraph("Hello World"));
		} catch (DocumentException de) {
			System.err.println(de.getMessage());
		} catch (IOException ioe) {
			System.err.println(ioe.getMessage());
		}

		// step 5: we close the document
		document.close();

			// (Fügen Sie Ihren Code hier ein) 

		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

Klar geht das eleganter. Hab aber hier einfach nur den Code des Beispiels in den Agenten kopiert. Als separate Klasse kann ich später mal posten. Ich bin müde.



Gruß Axel
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: animate am 18.05.06 - 09:35:43
ich habe [...] den Agentencode von der Webseite in einen neuen Agenten kopiert.

Ach so, daran kanns natürlcih auch liegen. So ein NotesAgent muss von einer bestimmten Klasse abgeleitet sein, das ist bei dem iText-Beispiel nicht der Fall, das hat ja erstmal nichts mit Notes zu tun. Aber Axel hat ja mittlerweile ein laufendes Beispiel gebracht.
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: flaite am 18.05.06 - 09:44:21
Du kannst es ja posten und ich erkläre mit meinen Worten und denen von Bruce Eckel, warum das nicht funktioniert. Es sind eigentlich immer die selben Probleme. CNF (ClassNotFound ist ein sehr typisches Problem von Leuten, die eher wenig Erfahrung mit Java haben). Letztlich gehts um die ewige Frage: Was ist der Classpath und was ist im Classpath?
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 18.05.06 - 16:52:29
So, jetzt funktioniert es.

Einzig die Zeile

package com.lowagie.examples.general;

musste ich dem Code von Axel noch hinzufügen. Ohne die Zeile tat es der Code nicht ...
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: flaite am 18.05.06 - 22:02:58

package com.lowagie.examples.general;
???
Kannst du mir mal den Agenten posten. Das verstehe ich ehrlichgesagt überhaupt nicht.
Warum sollte man diese Zeile in meinen Code posten?
Er tuts auch so. Außerdem ist diese Zeile imho sinnlos.
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 19.05.06 - 05:21:09
Gerne:

package com.lowagie.examples.general;
import lotus.domino.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.io.IOException;

public class JavaAgent extends AgentBase {

public void NotesMain() {

try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
System.out.println("Hello World");

// step 1: creation of a document-object
// NAMESPACE MUSS EXPLIZIT ANGEGEBEN WERDEN.
com.lowagie.text.Document document = new com.lowagie.text.Document();
try {
// step 2:
// we create a writer that listens to the document
// and directs a PDF-stream to a file
// WINDOWS ONLY. ICH BIN MÜDE
PdfWriter.getInstance(document,
new FileOutputStream("C:\\temp\\HelloWorld.pdf"));

// step 3: we open the document
document.open();
// step 4: we add a paragraph to the document
document.add(new Paragraph("Hello World"));
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}

// step 5: we close the document
document.close();

// (Fügen Sie Ihren Code hier ein)

} catch(Exception e) {
e.printStackTrace();
}
}
}

Ohne die zeile erzeugt er mir kein PDF, aber mit.  ???

Ohne diese Zeile wirft der Debugger folgendes aus:

Code
Error loading Agent Class: com.lowagie.examples.general.JavaAgent
java.lang.ClassNotFoundException: com.lowagie.examples.general.JavaAgent
	at lotus.domino.AgentLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:494)
	at lotus.domino.AgentLoader.runAgent(Unknown Source)
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: Eknuf am 19.05.06 - 09:23:38
Hallo Alex,

danke für deine Tipps auf dem Client lokal funktioniert es schon einmal supi.

Danke für eure Hilfe.

Bei mir lag es definitiv an den doppelten Backslashs für den Dateipfad.

Ich danke euch!

Cu
Eknuf
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: smoki am 19.05.06 - 11:02:48
Hallo eknori!

Du musst im "package" angeben, wo sich dein JavaAgent befindet. Bei mir ist er z. B. in "agent.composePdfDocument".

Gruss
Chris

Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: flaite am 19.05.06 - 12:41:36
Aber man braucht eigentlich kein Package anzugeben.
Ich habs allerdings mit Notes 7 gemacht.
Ich hatte jedoch auch unregelmässigkeiten mit JavaAgent.
Später dazu mehr. In 7 benötigt man zwingend die Zeile.
import lotus.domino.*;
Man kann nicht einfach einzelne Klassen importieren (ohne *) ansonsten meckert er bei JavaAgent.

Was mich nervt: Sowohl dieses "man muß ein package-statement haben" als auch meine Unregelmässigkeiten sind im Grunde genommen völlig un-Java. Package statements und import statements haben eine einfache Logik. Notes scheint da aber ein paar Spezial-Abhängigkeiten reinzuschiessen :-)
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: eknori (retired) am 19.05.06 - 12:53:26
Zitat
Ich habs allerdings mit Notes 7 gemacht.


Ich auch  :-\

OK, für mich ist es im Moment eh nur eine Bastelei; gebe ja zu, daß ich mit der Materie nicht recht auskenne.
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: smoki am 19.05.06 - 12:58:36
Ja du hast recht...!!

Normalerweise gibt es auch keinen Package eintrag!
Wenn man einen in einen neuen Agenten reinschreibt, verschiebt er auch automatisch die java-Datei in das richtige Verzeichnis.

In deinem und meinen (ich wollte es ungefähr 10 Minuten nach dir posten, aber du warst schneller!) kann ich über eine Änderung des Packageeintrags, die java-datei nicht mehr verschieben?! Das ist zumindest merkwürdig.

Ich habe meinen Agenten mit Domiclipse importiert... aber das sollte wohl nicht der Grund sein, da ich nicht der Einzige bin, bei dem es etwas komisch ist.. Mich stört es eigentlich auch nicht, da ich durch Eclipse immer automatisch einen Package-Eintrag habe.

Gruss
Chris
Titel: Re: PDFs erstellen mit iText Java-Klasse
Beitrag von: flaite am 22.05.06 - 08:30:55
In deinem und meinen (ich wollte es ungefähr 10 Minuten nach dir posten, aber du warst schneller!) kann ich über eine Änderung des Packageeintrags, die java-datei nicht mehr verschieben?!
das kann sein. Ist dann aber ein Bug der Java Agenten Umgebung in Notes.
Besonders wichtig ist das nicht. Aber gut zu wissen.
Wenn man kein package statement angibt, landet die Klasse per Java Spec in einem Default-Package.