2017-01-13 4 views
1

Als hervorgehoben in den Bildrändern, die sich überlappen, sehen sie dicker aus als andere Zellränder. Code I auf jeder Zelle verwendet Grenze für die Anwendung ist:Was ist Grenzverhalten, wenn sich die Grenzen überlappen? (Tabelle-Zelle, Zelle-Zelle)

cell.setUseVariableBorders(true); 
cell.setBorderWidthLeft(1); 
cell.setBorderWidthBottom(1); 
cell.setBorderWidthRight(1); 
cell.setBorderWidthTop(1); 

enter image description here

+1

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

+0

Sie sind nicht überlappend, sie werden "benachbart" zu anderen platziert und zeigen daher eine dicke "Grenze" als andere. –

+0

Ja absolut @jackjay. Haben Sie eine Lösung dafür, die mit itext5 funktioniert? –

Antwort

0

Es gibt zwei Dinge, die den Effekt, den Sie beschreiben verursachen.

  1. 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.
  2. 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 .

+0

Auch nach dem Entfernen der cell.setUseVariableBorders (true); Linie, es zeigt das gleiche Verhalten mit Itext 5. –

+0

Das kann durch den Betrachter verursacht werden (wie ich erklärte). Die möglichen Lösungen, die ich vorgeschlagen habe, bleiben: entferne einen Rahmen von einer der angrenzenden Zellen, oder upgrade auf iText 7 –

+0

Es funktioniert gut mit itext7, aber diese Version ist nicht kompatibel mit itext5. –

Verwandte Themen