Es gibt zwei Dinge, die den Effekt, den Sie beschreiben verursachen.
- Sie
cell.setUseVariableBorders(true);
verwenden, was bedeutet, dass Sie die Breite der Grenzen wollen innerhalb die Zelle zu sein. Wenn zwei benachbarte Zellen nebeneinander einen Rahmen haben, haben Sie zwei Rahmen mit einer Breite von 1 Benutzereinheit nebeneinander, was zu einem Rahmen mit einer Breite von 2 Benutzereinheiten führt.
- Wenn Sie die Zeile
cell.setUseVariableBorders(true);
entfernen, werden die beiden Rahmen gezeichnet, aber sie werden sich überlappen. Technisch gesehen sollten zwei überlappende Ränder mit einer Benutzereinheitsstärke zu etwas führen, das wie eine einzelne Grenze von 1 Benutzereinheit dick aussieht, aber einige PDF-Viewer machen überlappende Ränder etwas dicker als sie sein sollten.
Wie löst man das?
Nun, Sie scheinen bei iText neu zu sein, also warum nicht zu iText 7 wechseln? In iText 7 ist das Problem der überlappenden Grenzen gelöst. All dies in Chapter 5 of the iText 7 "building blocks" tutorial
erklärt Wenn Sie nicht zu iText 7 wechseln können, aber Sie sind mit iText 5 stecken, müssen Sie die Zeile cell.setUseVariableBorders(true);
und entfernen, wenn das nicht ausreichend ist, entfernen Sie eine der überlappenden Grenzen .
Die Grenze ist doppelt breit, da 2 Zellen berühren, also haben Sie 2 Grenzen, die sich berühren. Ihr Problem ist, dass sie sich nicht so sehr überschneiden als sich gegenseitig zu stoßen. Wenn Sie feststellen können, welche Zellen sich berühren, können Sie den Rahmen für die untere oder rechte Seite der Zellen entfernen. Also Zelle 2 berührt Cell1 und fügt dann keinen Rahmen für die Zelle 2 links hinzu. Aber Zelle 2 ist nicht unter einer Zelle, also behalte den oberen Rand. – gabeio
Sie sind nicht überlappend, sie werden "benachbart" zu anderen platziert und zeigen daher eine dicke "Grenze" als andere. –
Ja absolut @jackjay. Haben Sie eine Lösung dafür, die mit itext5 funktioniert? –