Sök…


Anmärkningar

IText 5- PdfPTable och PdfPCell valdes eftersom vi redan hade klasser med namnet Table och Cell att skapa tabell- och cellobjekt på den högsta programmeringsnivån. Det fanns också en klass med namnet PdfTable som skulle användas av iText internt. Dessa klasser hade många brister och de avskrivs till förmån för PdfPTable och PdfPCell . De har tagits bort för länge sedan.

Under åren fick PdfPTable och PdfPCell också kritik från användare. Till exempel: användare förstod inte skillnaden mellan textläge och kompositläge .

Textläge används när du skapar en PdfPCell så här:

cell = new PdfPCell(new Phrase("Cell with rowspan 2"));

I det här fallet definierar du egenskaper som den horisontella justeringen på nivån på PdfPCell .

Kompositläget sparkar i det ögonblick du använder addElement() :

cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));

I det här fallet ignoreras vissa egenskaper definierade på PdfPCell (t.ex. den horisontella justeringen). Den horisontella justeringen ska definieras på nivån för elementen som läggs till cellen. Till exempel: om du vill skapa en cell där olika stycken behöver ha en annan horisontell inriktning, byter du till kompositläge.

Om du tittar på skärmbilden i tabellen skapad med iText 5-exemplet kommer du att märka att cellerna med innehållet Cell 1.1 (tillagd i textläge) och Cell 1.2 (tillagda i sammansatt läge) är inriktade helt annorlunda.

Som svar på kritiken mot den udda justeringen introducerade vi metoder för att använda information om uppstigande och nedstigande. Vi använder dessa metoder för celler med innehåll Cell 2.1 (läggs till i textläge) och Cell 2.2 (läggs till i kompositläge). Vi introducerade också en stoppning av 5 för dessa celler.

Nu är resultatet mycket bättre.

Vad vi fixade i iText 7:

Eftersom vi skapade iText 7 från grunden hade vi inga arvskurser med namn som vi inte kunde återanvända. Vi introducerade ett nytt Table och en ny Cell .

Det finns inget mer textläge och inget mer sammansatt läge. En Cell skapas antingen utan parametrar eller med parametrar som definierar radspan och colspan. Allt innehåll läggs till på samma sätt: med metoden add() .

Våra kunder bad också om att tillhandahålla ett sätt att skilja marginal och stoppning. I iText 7-exemplet har vi lagt till en grå bakgrund för att visa skillnaden. I cellen med innehåll Cell 2.1 definierar vi en marginal på 5 användarenheter. Standard stoppning är 2. I cellen med innehåll Cell 2.2 definierar vi en stoppning av 5 användarenheter, standardmarginalen i 0.

Som du kan se på skärmbilderna, är cellerna gjorda ganska snyggt. Vi behövde inte använda metoder för att ställa in ascender eller descender. Standardbeteendet är mycket närmare beteendet som en utvecklare kan förvänta sig.

Vill du veta mer om tabeller och celler i iText 7?

Läs Lägga till AbstractElement-objekt (del 2) som är kapitel 5 i iText 7: Building Blocks- handledning. Skaffa gratis e-bok!

HelloWorldTable.java (iText 5)

I det här exemplet skapar vi följande tabell med iText 5:

ange bildbeskrivning här

Vi behöver klassen PdfPTable och PdfPCell att uppnå detta:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(3);
    PdfPCell cell = new PdfPCell(new Phrase("Cell with colspan 3"));
    cell.setColspan(3);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell);
    cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
    cell.setRowspan(2);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    table.addCell(cell);
    table.addCell("Cell 1.1");
    cell = new PdfPCell();
    cell.addElement(new Phrase("Cell 1.2"));
    table.addCell(cell);
    cell = new PdfPCell(new Phrase("Cell 2.1"));
    cell.setPadding(5);
    cell.setUseAscender(true);
    cell.setUseDescender(true);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell);
    cell = new PdfPCell();
    cell.setPadding(5);
    cell.setUseAscender(true);
    cell.setUseDescender(true);
    Paragraph p = new Paragraph("Cell 2.2");
    p.setAlignment(Element.ALIGN_CENTER);
    cell.addElement(p);
    table.addCell(cell);
    document.add(table);
    document.close();
}

Källa: utvecklare.itextpdf.com

HelloWorldTable.java (iText 7)

I det här exemplet skapar vi följande tabell med iText 7:

ange bildbeskrivning här

Vi behöver klassen Table och Cell att uppnå detta:

public void createPdf(String dest) throws IOException {
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
    try (Document document = new Document(pdf)) {
        Table table = new Table(3);
        Cell cell = new Cell(1, 3)
            .setTextAlignment(TextAlignment.CENTER)
            .add("Cell with colspan 3");
        table.addCell(cell);
        cell = new Cell(2, 1)
            .add("Cell with rowspan 2")
            .setVerticalAlignment(VerticalAlignment.MIDDLE);
        table.addCell(cell);
        table.addCell("Cell 1.1");
        table.addCell(new Cell().add("Cell 1.2"));
        table.addCell(new Cell()
            .add("Cell 2.1")
            .setBackgroundColor(Color.LIGHT_GRAY)
            .setMargin(5));
        table.addCell(new Cell()
            .add("Cell 1.2")
            .setBackgroundColor(Color.LIGHT_GRAY)
            .setPadding(5));
        document.add(table);
    }
}

Källa: utvecklare.itextpdf.com och iText 7: Handledning för byggstenar .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow