2016-06-12 8 views

Antwort

1

Bitte nehmen Sie sich einen Blick auf Chapter 2 of the tutorial "iText 7: Building Blocks"

In diesem Tutorial erstellen wir ein Rectangle Objekt und wir ziehen es zu einem PdfCanvas Objekt:

Rectangle rectangle = new Rectangle(36, 650, 100, 100); 
pdfCanvas.rectangle(rectangle); 
pdfCanvas.stroke(); 

Wie bekomme ich ein Objekt PdfCanvas?

Entweder Sie schaffen es von einem PdfPage Objekt, das Sie selbst erstellt haben:

OutputStream fos = new FileOutputStream(dest); 
PdfWriter writer = new PdfWriter(fos); 
PdfDocument pdf = new PdfDocument(writer); 
PdfPage page = pdf.addNewPage(); 
PdfCanvas pdfCanvas = new PdfCanvas(page); 

Oder Sie erhalten eine vorhandene Seite aus dem PdfDocument Objekt:

PdfCanvas canvas = new PdfCanvas(pdf, pdf.getNumberOfPages()); 

Sie die Linienbreite optimieren können, Strichmuster, Linienfarbe, ... mit verschiedenen Methoden im Objekt PdfCanvas.

Es gibt andere Möglichkeiten, ein Rechteck zu zeichnen, aber in einer Ihrer vorherigen Fragen erwähnten Sie eine ColumnDocumentRenderer. Wenn Ihre aktuelle Frage Teil desselben Kontextes ist, haben Sie bereits Rectangle Objekte und wenn Sie eine ColumnDocumentRenderer haben, haben Sie Zugriff auf ein PdfCanvas Objekt. Sie können Ihre App problemlos automatisieren, um ein Rechteck um jede gerenderte Spalte zu zeichnen.

Natürlich: Da Sie meine vorherige Antwort nie akzeptiert haben, könnte meine Annahme falsch sein.

+0

Wenn das OP möchte, dass iText das Layout macht, kann seine Antwort mehr auf den Punkt kommen, da das Zeichnen direkt auf der Leinwand die iText-Layouts umgeht. Aber wie Sie bereits angemerkt haben, ist das OP ziemlich zurückhaltend zu beschreiben, was er will, also wissen wir nicht ... – mkl

+0

Die meisten der High-Level-Objekte ('Paragraph',' Table', 'Cell', ...) haben eine 'setBorder()' Methode, die für genau denselben Zweck implementiert ist, aber das OP explizit aufgefordert, ein 'Rectangle' zu ​​rendern. –

+0

* aber das OP hat explizit gebeten, ein 'Rectangle' zu ​​rendern. * ... und benutzt dann den Absatz selbst. Naja ...;) – mkl

0

Zum Guten oder Schlechten dieser schien mein Ziel zu erreichen:

AreaBreak nextArea = new AreaBreak(AreaBreakType.NEXT_AREA); 
document.add(nextArea); 
float h = document.getRenderer().getCurrentArea().getBBox().getHeight(); 
float w = document.getRenderer().getCurrentArea().getBBox().getWidth(); 
Paragraph endB = new Paragraph(" "); 
endB.setHeight(h); 
endB.setWidth(w); 
SolidBorder b = new SolidBorder(2); 
endB.setBorder(b); 
document.add(endB); 
+0

Das ist ziemlich komplex, um etwas so einfaches zu erreichen. Ich werde eine andere Antwort geben. –