Java und iText PDF erstellen

Hallo zusammen,

ich habe einen String der aus Leerzeichen besteht.
Der String soll z.B. von Position 50 -80 unterstrichen werden.

Auszug aus dem Programm:
PdfContentByte cb = writer.getDirectContent();
cb.beginText();
ColumnText ct = new ColumnText(cb);

String Dummy = " ";
if ( i

Hallo zusammen,

Ich bekomme es einfach nicht hin wie ich iText dazu bekomme
mir ein Leerzeichen zu unterstreichen.

Also, mit einem einfachen

document.add(
 new Paragraph(
 " ", 
 FontFactory.getFont(
 FontFactory.HELVETICA\_BOLD, 
 FontFactory.defaultEncoding, 
 10, 
 com.lowagie.text.Font.UNDERLINE)));

funktioniert es.

Fuer mich sieht das so aus, als wuerde das nur innerhalb von
ColumnText nicht funktionieren.

Halten wir fest: Unterstreichen an sich geht innerhalb von
ColumnText, aber einen String bestehend aus Leerzeichen
unterstreicht er nicht. Fuehrende Leerzeichen werden mit
unterstrichen, nachfolgende nicht.

Diesen Code als Basis benutzt (itext, 1.3.4):
http://itextdocs.lowagie.com/examples/com/lowagie/ex…

Aber wenn du nur ein einzelnes Leerzeichen unterstreichen willst,
dann nimm doch stattdessen einen Unterstrich _. Hat doch den
gleichen Effekt!?

Gruss, Patrick

Hallo Patrick,

danke für deine Hilfe,
aber ich glaube ich scheitere an dem verdammten Unterstreichen.

Dein Beispiel ist okay, aber leider kann ich den Paragraph nicht
verwenden da ich die Zeile in den ColumText schreibe.
Und genau damit ist das Problem vorhanden.
Das alles habe ich ausprobiert:
//Element edummy = ( new Chunk( " ", underlinefont) );
char Dummy = ‚\u0002‘;
String dummy = „\u9999“;
if ( i [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Patrick,

aber ich glaube ich scheitere an dem verdammten
Unterstreichen.

Nur mal so fuer mich zum Verstehen, warum will man ein
einzelnes Leerzeichen unterstreichen?

Aber iText weigert sich einfach das zu drucken.

Ich habe mal einen Blick in den Code geworfen und habe mir auch
die Werte im Debugger angeschaut, aber ich habe die Stelle, an
der die Leerzeichen „verschwinden“ bzw. nicht unterstrichen werden,
nicht gefunden. Der Aufruf ct.addText(…); fuegt noch den richtigen
String hinzu. Irgendwo in ct.go() geht es dann „schief“.

Gruss, Patrick

Hallo Patrick,

es ist so:
ich bekomme eine Datei von einer AS/400.
Darin sind die Listendaten. Statt diese auszudrucken
soll die Liste in das PDF Format gebracht werden.

Die Druckzeilen könnten beispielhaft so aussehen

CUSTOMER :7025887 ORDER DATE : 16.10.2003 QTY

gsdgdsgdsg fgfgfgfg 1500

Total: 1500>ab hier wird die Zeile nicht mehr unterstrichen

Ich habe keinen Einfluss auf die Listendaten.Das ist
ja das Problem.

Im ersten Versuch hatte ich auch die Sache mit einem
einfachen Phrase und Chunk. Damit hatte es an der Stelle
auch funktioniet.
Dann musste ich aber auf den ColumnText umsteigen
um die Zeilenhöhe zwischen den Zeilen beeinflussen zu können.
Ich Drucke die Zeilen z.B:
ct.setSimpleColumn(0, 20, 1000, StartyMax - (zz*(s+l) ) );

Damit kann ich jetzt die Zeilenhöhe beeinflussen.

Nur jetzt bekomme ich das mit den Leerzeichen
und dem unterstreichen nicht mehr hin.

Hast Du vielleicht noch eine andere Idee?
Gruss Michael

aber ich glaube ich scheitere an dem verdammten
Unterstreichen.

Nur mal so fuer mich zum Verstehen, warum will man ein
einzelnes Leerzeichen unterstreichen?

Aber iText weigert sich einfach das zu drucken.

Ich habe mal einen Blick in den Code geworfen und habe mir
auch
die Werte im Debugger angeschaut, aber ich habe die Stelle, an
der die Leerzeichen „verschwinden“ bzw. nicht unterstrichen
werden,
nicht gefunden. Der Aufruf ct.addText(…); fuegt noch den
richtigen
String hinzu. Irgendwo in ct.go() geht es dann „schief“.

Gruss, Patrick

Hallo

Du redest doch aber immer von einem einzelnen Leerzeichen.
Das funktioniert nicht. Leerzeichen innerhalb eines Satzes werden
aber unterstrichen. Siehe auch meinen ersten Artikel zum Thema.

Halten wir fest: Unterstreichen an sich geht innerhalb von
ColumnText, aber einen String bestehend aus Leerzeichen
unterstreicht er nicht. Fuehrende Leerzeichen werden mit
unterstrichen, nachfolgende nicht.

http://img97.imageshack.us/my.php?image=test9kv.jpg

Oder unterstreichst du Zeichen fuer Zeichen?

Gruss, Patrick

Hallo

genau so ist es. Ich lese den String Zeichen für Zeichen.
Dann stelle ich fest das z.B. 1-50 irgendwelche Zeichen stehen
die auch dann unterstrichen werden.Soweit klappts.
Der String geht dann aber noch von 51-132. Bestehend
aus Leerstellen.
Diese sollen dann auch noch unterstrichen werden.

Noch eine Idee ?

gruss
Michael

Du redest doch aber immer von einem einzelnen
Leerzeichen.
Das funktioniert nicht. Leerzeichen innerhalb eines Satzes
werden
aber unterstrichen. Siehe auch meinen ersten Artikel zum
Thema.

Halten wir fest: Unterstreichen an sich geht innerhalb von
ColumnText, aber einen String bestehend aus Leerzeichen
unterstreicht er nicht. Fuehrende Leerzeichen werden mit
unterstrichen, nachfolgende nicht.

http://img97.imageshack.us/my.php?image=test9kv.jpg

Oder unterstreichst du Zeichen fuer Zeichen?

Gruss, Patrick

Hi!

Ich habe die Stelle im Code gefunden. Und zwar wird an
einer Stelle in BidiLine.java das

 if (totalTextLength == 0) {
 ArrayList ar = new ArrayList();
 PdfChunk ck = new PdfChunk("", detailChunks[0]);
 ar.add(ck);
 return new PdfLine(0, 0, alignment, true, ar, isRTL);
 }

gemacht, wenn in einem Chunk nur Leerzeichen gefunden werden.
detailChunks[0] ist hier dein Leerzeichen.
Aendert man den Code jetzt mal spasseshalber so

 if (totalTextLength == 0) {
 ArrayList ar = new ArrayList();
 PdfChunk ck = new PdfChunk(" ", detailChunks[0]);
 ar.add(ck);
 return new PdfLine(0, 0, alignment, true, ar, isRTL);
 }

dann bekommt man genau die oben angegebenen Leerzeichen unterstrichen
in das PDF geschrieben (entsprechender Font vorausgesetzt).

http://img355.imageshack.us/my.php?image=test3fy.jpg

Dein Vorhaben hat aus meiner Sicht also keine Aussicht auf Erfolg.
Vielleicht kannst du den Code zu deinen Gunsten anpassen,
oder schreib die Jungs an und frag warum das aus deren Sicht
nicht moeglich sein soll.
Eine Idee fuer einen Workaround habe ich leider nicht. Im Code
deutet auch nichts darauf hin, wie man das trimRight (was an einigen
Stellen verwendet wird) unterdruecken kann.

Gruss, Patrick

Hi Patrick,

puhhhhhhhh da muss ich passen. Soweit sind meine Java Kenntnisse
noch nicht um in dem vorhandenen iText etwas zu ändern.
Aber vielen Dank für deine Mühe.

Irgendwie habe ich mich in die Sache verrannt,
aber trotzdem will ich es schaffen.

Ich werde jetzt erstmal noch andere Versuche starten.
Vielleicht führt ja ein anderer Weg zum Erfolg.

Nochmals Danke
Gruss
Michael

Ich habe die Stelle im Code gefunden. Und zwar wird an
einer Stelle in BidiLine.java das

if (totalTextLength == 0) {
ArrayList ar = new ArrayList();
PdfChunk ck = new PdfChunk("", detailChunks[0]);
ar.add(ck);
return new PdfLine(0, 0, alignment, true, ar,
isRTL);
}

gemacht, wenn in einem Chunk nur Leerzeichen gefunden werden.
detailChunks[0] ist hier dein Leerzeichen.
Aendert man den Code jetzt mal spasseshalber so

if (totalTextLength == 0) {
ArrayList ar = new ArrayList();
PdfChunk ck = new PdfChunk(" ",
detailChunks[0]);
ar.add(ck);
return new PdfLine(0, 0, alignment, true, ar,
isRTL);
}

dann bekommt man genau die oben angegebenen Leerzeichen
unterstrichen
in das PDF geschrieben (entsprechender Font vorausgesetzt).

http://img355.imageshack.us/my.php?image=test3fy.jpg

Dein Vorhaben hat aus meiner Sicht also keine Aussicht auf
Erfolg.
Vielleicht kannst du den Code zu deinen Gunsten anpassen,
oder schreib die Jungs an und frag warum das aus deren Sicht
nicht moeglich sein soll.
Eine Idee fuer einen Workaround habe ich leider nicht. Im Code
deutet auch nichts darauf hin, wie man das trimRight (was an
einigen
Stellen verwendet wird) unterdruecken kann.

Gruss, Patrick