PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wydruk tabeli nie pasuje do rozmiaru strony

Istnieją dwie możliwe opcje, możesz spróbować zmienić rozmiar kolumn, aby były równomiernie rozłożone na dostępnej szerokości strony LUB możesz przeskalować wynikowy wynik W GÓRĘ, aby pasował do strony.

Skalowanie

Domyślnie TablePrintable tylko skaluje W DÓŁ, ​​wymuszając JTable jest zbyt duży, aby zmieścić się w dostępnym rozmiarze strony (szerokości). Możesz to zmienić, aby umożliwić skalowanie w GÓRĘ.

Fragment kodu, który oblicza skalę, znajduje się w print TablePrintable klasa i wygląda jak...

double sf = 1.0D;
if (printMode == JTable.PrintMode.FIT_WIDTH && totalColWidth > imgWidth) {

    // if not, we would have thrown an acception previously
    assert imgWidth > 0;

    // it must be, according to the if-condition, since imgWidth > 0
    assert totalColWidth > 1;

    sf = (double) imgWidth / (double) totalColWidth;
}

Interesuje nas część if instrukcja, która brzmi "jeśli printmode równa się FIT_WIDTH AND totalColWidth jest większe od szerokości strony"...Chcemy to zmienić, aby czytać tylko ""jeśli printmode równa się FIT_WIDTH"...

Możesz zmienić

if (printMode == JTable.PrintMode.FIT_WIDTH && totalColWidth > imgWidth) {

do

if (printMode == JTable.PrintMode.FIT_WIDTH) {

co pozwoli teraz na TablePrintable skalować zarówno tabelę W GÓRĘ, jak i W DÓŁ...

Co spowoduje coś takiego jak...

  • Na górze jest wyjście ekranu
  • Po lewej to aktualny wynik
  • Po prawej stronie jest skalowany wynik

Zmień rozmiar kolumn

Jest to trochę bardziej skomplikowane i NIE POWINNO być stosowane do JTable który jest już na ekranie, ponieważ spowoduje to bałagan w sposobie, w jaki jest faktycznie wyświetlany...

Zasadniczo, gdy tabela jest drukowana, nadpisujemy szerokości kolumn, aby zapewnić im równe miejsce na stronie...

Najpierw musimy zmienić totalColWidth w TablePrintable z...

private final int totalColWidth;

do

private int totalColWidth;

ponieważ musimy mieć możliwość modyfikacji wartości po jej zainicjowaniu...

Następnie potrzebujemy flagi, aby określić, czy kolumny zostały zmodyfikowane, czy nie, ponieważ wielokrotne aktualizowanie ich rozmiarów za każdym razem, gdy print jest marnotrawstwem nazywa się.

Dodaj private boolean updateColumnWidths; do pól TablePrintable (na przykład w sekcji private final Font footerFont; )

Teraz, kiedy print nazywa się, musimy podjąć szereg decyzji...

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {

    // for easy access to these values
    final int imgWidth = (int) pageFormat.getImageableWidth();
    final int imgHeight = (int) pageFormat.getImageableHeight();

    if (imgWidth <= 0) {
        throw new PrinterException("Width of printable area is too small.");
    }

    // Have we modified the column widths yet??
    if (!updateColumnWidths) {

        // Only update the column widths if the current total column width
        // is less then the available imgWidth (page width)
        if (totalColWidth < imgWidth) {

            // Calculate the required column width to allow the columns to
            // span the page...
            int columnCount = table.getColumnCount();
            int columnWidth = (int) (imgWidth / (float) columnCount);
            TableColumnModel columnModel = table.getColumnModel();
            // Update the columns...
            for (int col = 0; col < columnModel.getColumnCount(); col++) {
                TableColumn tc = columnModel.getColumn(col);
                tc.setMinWidth(columnWidth);
                tc.setMaxWidth(columnWidth);
                tc.setPreferredWidth(columnWidth);
                tc.setWidth(columnWidth);
            }
            // Update the totalColWidth, this should prevent
            // any scaling been applied
            totalColWidth = columnModel.getTotalColumnWidth();
            
        }
        updateColumnWidths = true;

    }
    //...

Co generuje coś takiego jak...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pghoard Alternatywy - Zarządzanie kopiami zapasowymi PostgreSQL z ClusterControl

  2. Jak monitorować działanie PostgreSQL w kontenerze Docker:część pierwsza

  3. Postgresql generuje_serie miesięcy

  4. Wstaw wyzwalacz, aby zaktualizować inną tabelę za pomocą PostgreSQL

  5. Metoda org.postgresql.jdbc4.Jdbc4Connection.isValid(int) nie została jeszcze zaimplementowana