2017-09-10 3 views
0

Dies ist, was ich bekomme. Wie kann ich den Tisch auch drehen - nicht nur das Dokument. Die Spalten könnten breiter sein, wenn der Tisch gedreht wurde. resulting documentÄndern Sie die Ausrichtung von iText PdfPTable

Der folgende Code reproduziert das Problem in einem kleineren Maßstab mit nur 1 Spalte.

private void exportTableAsPDF(File outputFile) { 

    // PDF document 
    Document pdfDocument = new Document(); 
    try { 
     PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, new FileOutputStream(outputFile)); 

     // Used to rotate the page - iText recommended this approach in an answer to a question referenced below 
     // https://developers.itextpdf.com/question/how-rotate-page-while-creating-pdf-document 
     class RotateEvent extends PdfPageEventHelper { 
      public void onStartPage(PdfWriter writer, Document document) { 
       writer.addPageDictEntry(PdfName.ROTATE, PdfPage.SEASCAPE); 
      } 
     } 

     // Rotates each page to landscape 
     pdfWriter.setPageEvent(new RotateEvent()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    pdfDocument.open(); 

    // PDF table 
    PdfPTable pdfPTable = new PdfPTable(1); 

    // Add column header cell 
    PdfPCell dateCell = new PdfPCell(new Phrase("Date")); 
    pdfPTable.addCell(dateCell); 

    // Gets cell data 
    LogEntryMapper logEntryMapper = new LogEntryMapper(); 
    List<LogEntry> logEntries = logEntryMapper.readAll(); 

    // Adds a cell to the table with "date" data 
    for (LogEntry logEntry : logEntries) { 
     dateCell = new PdfPCell(new Phrase(logEntry.getLogEntryDate())); 
     pdfPTable.addCell(dateCell); 
    } 

    // Adds the table to the pdf document 
    try { 
     pdfDocument.add(pdfPTable); 
    } catch (DocumentException e) { 
     e.printStackTrace(); 
    } 

    pdfDocument.close(); 
} 

Dieser Codeblock erzeugt das folgende Ergebnis. enter image description here

+0

Bitte zeigen Sie uns ein minimales Codebeispiel, das dieses Problem reproduziert. –

+0

@JorisSchellekens Ich habe meinen Code pro Anfrage hinzugefügt. – Region39

+0

Sie wollen also im Wesentlichen eine Landschaft Seite aufrecht gefüllt? – mkl

Antwort

1

Die Lösung, die Sie gefunden haben (mit dem Seitenereignis-Listener), ist für ein anderes Problem: Sie dient zum Drucken auf dem Dokumentpapierformat und zum Drehen der Seite einschließlich des Inhalts. Für Ihr Problem (Druck aufrecht auf einem gedrehten Papier) benötigen Sie nur das Dokument mit einem gedrehten Papierformat zu initialisieren:

Document pdfDocument = new Document(PageSize.A4.rotate()); 

Auf diese Weise macht die Tabelle Verwendung der zusätzlichen Seitengröße.

Sie werden jedoch feststellen, dass links und rechts immer noch freier Platz ist. Dafür gibt es zwei Gründe:

  • Tabellen berücksichtigen die für das Dokument konfigurierten Seitenränder;
  • Tabellen verwenden standardmäßig nur 80% der verfügbaren Breite.

Sie können daher reduzieren, dass die freien Raum links und rechts von

  • die Seitenränder zu reduzieren, z.B. durch den Einsatz noch einen weiteren Document Konstruktor

    Document pdfDocument = new Document(PageSize.A4.rotate(), 
                marginLeft, marginRight, marginTop, marginBottom); 
    

    oder durch pdfDocument.setMargins(marginLeft, marginRight, marginTop, marginBottom) vor der betreffenden Seite mit erstellt wird;

  • Erhöhung des Prozentsatzes der verfügbaren Breite von der Tabelle verwendeten

    pdfPTable.setWidthPercentage(widthPercentage); 
    

    einen widthPercentage Wert von beispielsweise unter Verwendung von 100.

Verwandte Themen