sql >> Databáze >  >> RDS >> PostgreSQL

Tisk tabulky neodpovídá velikosti stránky

Máte dvě možné možnosti, můžete zkusit změnit velikost sloupců tak, aby byly rovnoměrně rozmístěny po celé dostupné šířce stránky, NEBO můžete výsledný výstup zvětšit tak, aby odpovídal stránce.

Škálování

Ve výchozím nastavení TablePrintable pouze se zmenšuje a vynutí JTable který je příliš velký a nevejde se do dostupné velikosti stránky (šířky). Toto můžete změnit, aby se také zvětšilo.

Úsek kódu, který vypočítává měřítko, je v print z TablePrintable třída a vypadá jako...

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;
}

Část, která nás zajímá, je if příkaz, který zní "pokud se režim tisku rovná FIT_WIDTH A celková šířkaColWidth je větší než šířka stránky"...Chceme to změnit tak, aby znělo pouze ""pokud se režim tisku rovná FIT_WIDTH"...

Můžete změnit

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

do

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

což nyní umožní TablePrintable jak změnit měřítko tabulky NAHORU a DOLŮ...

Což bude mít za následek něco jako...

  • Nahoře je výstup obrazovky
  • Vlevo je aktuální výsledek
  • Vpravo je zmenšený výsledek

Změnit velikost sloupců

Toto je trochu složitější a NEMĚLO by se to nikdy aplikovat na JTable který je již na obrazovce, protože to bude mít problém s tím, jak se skutečně zobrazí...

V zásadě, když je tabulka vytištěna, přepíšeme šířky sloupců, aby měly stejný prostor na stránce...

Nejprve musíme změnit totalColWidth v TablePrintable od...

private final int totalColWidth;

do

private int totalColWidth;

protože potřebujeme mít možnost upravit hodnotu poté, co je inicializována...

Dále potřebujeme příznak, který určí, zda byly sloupce změněny nebo ne, protože je zbytečné opakovaně aktualizovat jejich velikosti při každém print se nazývá.

Přidejte private boolean updateColumnWidths; do polí TablePrintable (například v části private final Font footerFont; )

Nyní, když print se nazývá, musíme učinit řadu rozhodnutí...

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 něco jako...




  1. dobrý postgresql klient pro Windows?

  2. Příklady JSON_CONTAINS() v MySQL

  3. aktualizovat hodnoty sloupců sloupcem jiné tabulky na základě podmínky

  4. Může pokojová knihovna zkopírovat db ze složky aktiv?