PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Таблица Печат не отговаря на размера на страницата

Има две възможни опции, които имате, можете да опитате да преоразмерите колоните, така че да са равномерно разпределени в наличната ширина на страницата ИЛИ можете да мащабирате получения резултат НАГОРЕ, така че да пасне на страницата.

Мащабиране

По подразбиране TablePrintable намалява само НАДОЛУ, принуждавайки JTable който е твърде голям, за да се побере в наличния размер на страницата (ширина). Можете да промените това, за да му позволите също да се увеличава.

Частта от кода, която изчислява мащаба, е в print на TablePrintable клас и изглежда като...

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

Частта, която ни интересува, е if изявление, което гласи "ако printmode е равен на FIT_WIDTH И totalColWidth е по-голям от ширината на страницата"...Искаме да променим това, за да чете само ""if printmode е равно на FIT_WIDTH"...

Можеш да промениш

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

до

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

което сега ще позволи на TablePrintable както за мащабиране на таблицата НАГОРЕ и НАДОЛУ...

Което ще доведе до нещо като...

  • Отгоре е изходът на екрана
  • Вляво е текущият резултат
  • Вдясно е мащабираният резултат

Преоразмеряване на колоните

Това е малко по-трудно и никога НЕ ТРЯБВА да се прилага към JTable който вече е на екрана, тъй като това ще обърка начина, по който всъщност се показва...

По принцип, когато таблицата е отпечатана, ще заменим ширините на колоните, за да им дадем еднакво пространство в цялата страница...

Първо, трябва да променим totalColWidth в TablePrintable от...

private final int totalColWidth;

до

private int totalColWidth;

защото трябва да можем да променим стойността, след като бъде инициализирана...

След това се нуждаем от флаг, за да определим дали колоните са били модифицирани или не, тъй като е излишно да се налага многократно да актуализирате техните размери всеки път, когато print се нарича.

Добавете private boolean updateColumnWidths; към полетата на TablePrintable (например под private final Font footerFont; )

Сега, когато print се нарича, трябва да вземем поредица от решения...

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;

    }
    //...

Което генерира нещо като...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. списък на схемата с размери (относителни и абсолютни) в база данни на PostgreSQL

  2. Незадължителен аргумент във функцията PL/pgSQL

  3. За какво се използват '$$' в PL/pgSQL

  4. Как да актуализирате масив в PostgreSQL

  5. Преобразувайте набор от резултати от SQL масив в масив от низове