iText - Seltsames Spalten- / Seitenwechselverhalten mit ColumnText

Ich bin ganz neu in iText und versuche Folgendes zu erreichen:

Lesen Sie eine Liste der Textdateien von der lokalen FestplatteOrdnen Sie die Texte der Dateien in einer zweispaltigen PDF-Datei anFügen Sie vor jedem Text einen fortlaufend nummerierten Index ein

Ich habe mit dem MovieColumns1-Beispiel begonnen (http://itextpdf.com/examples/iia.php?id=64) und endete mit dem folgenden Code:

    final float[][] COLUMNS_COORDS = { { 36, 36, 296, 806 }, { 299, 36, 559, 806 } };

    Document document = new Document(PageSize.A4);
    PdfWriter writer = PdfWriter.getInstance(document, resultFile);
    document.open();

    ColumnText ct = new ColumnText(writer.getDirectContent());
    ct.setSimpleColumn(COLUMNS_COORDS[0][0], COLUMNS_COORDS[0][1],
        COLUMNS_COORDS[0][2], COLUMNS_COORDS[0][3]);

    File textDir = new File("c:/Users/raddatz/Desktop/123/texts/");
    File[] files = textDir.listFiles();

    int i = 1;
    int column = 0;
    for (File file : files) {
        String text = FileUtils.readFileToString(file, "UTF-8");
        float yLine = ct.getYLine();
        System.out.println("adding '" + file.getName() + "'");

        PdfPCell theText = new PdfPCell(new Phrase(text, new Font(Font.HELVETICA, 10)));
        theText.setBorder(Rectangle.NO_BORDER);
        theText.setPaddingBottom(10);
        PdfPCell runningNumber = new PdfPCell(new Phrase(new DecimalFormat("00").format(i++), new Font(
            Font.HELVETICA, 14, Font.BOLDITALIC,
            new Color(0.7f, 0.7f, 0.7f))));
        runningNumber.setBorder(Rectangle.NO_BORDER);
        runningNumber.setPaddingBottom(10);
        PdfPTable table = new PdfPTable(2);
        table.setWidths(new int[] { 12, 100 });
        table.addCell(runningNumber);
        table.addCell(theText);
        ct.addElement(table);
        int status = ct.go(true);
        if (ColumnText.hasMoreText(status)) {
            column = Math.abs(column - 1);
            if (column == 0) {
                document.newPage();
                System.out.println("inserting new page with size :" + document.getPageSize());
            }
            ct.setSimpleColumn(
                COLUMNS_COORDS[column][0], COLUMNS_COORDS[column][1],
                COLUMNS_COORDS[column][2], COLUMNS_COORDS[column][3]);
            yLine = COLUMNS_COORDS[column][3];
            System.out.println("correcting yLine to: " + yLine);
        } else {
            ct.addElement(table);
        }
        ct.setYLine(yLine);
        System.out.println("before adding: " + ct.getYLine());
        status = ct.go(false);
        System.out.println("after adding: " + ct.getYLine());
        System.out.println("--------------------------------");
    }

    document.close();

Hier sehen Sie das Ergebnis:http://d.pr/f/NEmx

Als ich die erste Seite des resultierenden PDFs betrachtete, ging ich davon aus, dass alles gut geklappt hat.

Aber auf der zweiten Seite sehen Sie die Probleme:

Text # 31 wird nicht vollständig angezeigt (erste Zeile + Index ist abgeschnitten / nicht im sichtbaren Bereich)Text # 46 wird nicht vollständig angezeigt (die ersten drei Zeilen + Index sind abgeschnitten / nicht im sichtbaren Bereich)

Auf Seite 3 scheint alles wieder in Ordnung zu sein. Ich bin hier wirklich verloren.

- UPDATE (14.03.2013) -

Ich habe jetzt den Inhalt des PDFs analysiert. Das Problem ist nicht, dass der Inhalt in nicht sichtbaren Bereichen angezeigt wird, sondern dass der Inhalt überhaupt nicht im PDF vorhanden ist. Der fehlende Teil des Inhalts ist genau derjenige, der in die vorherige Spalte / Seite gepasst hätte. Anscheinend manipuliert ColumnText.go (true) das zuvor von addElement () übergebene Objekt. Kann das jemand bestätigen? Wenn ja: was kann ich dagegen tun?

- UPDATE beenden (2013-03-14) -

Ich freue mich auf deine Antwort

Grüße, sven

Antworten auf die Frage(1)

Ihre Antwort auf die Frage