PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Tabel Cetak tidak sesuai dengan ukuran halaman

Ada dua opsi yang mungkin Anda miliki, Anda dapat mencoba dan mengubah ukuran kolom sehingga didistribusikan secara merata di seluruh lebar halaman yang tersedia ATAU Anda dapat menskalakan output yang dihasilkan NAIK sehingga sesuai dengan halaman.

Penskalaan

Secara default, TablePrintable hanya skala TURUN, memaksa JTable yang terlalu besar untuk muat dalam ukuran halaman yang tersedia (lebar). Anda dapat mengubah ini untuk mengizinkannya juga meningkatkan.

Potongan kode yang menghitung skala ada di dalam print dari TablePrintable kelas dan terlihat seperti...

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

Bagian yang kami minati adalah if pernyataan, yang berbunyi "jika mode cetak sama dengan FIT_WIDTH DAN totalColWidth lebih besar dari lebar halaman"...Kami ingin mengubahnya menjadi ""jika mode cetak sama dengan FIT_WIDTH" saja...

Anda dapat mengubah

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

untuk

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

yang sekarang akan mengizinkan TablePrintable untuk menskalakan tabel NAIK dan TURUN...

Yang akan menghasilkan sesuatu seperti...

  • Atas adalah keluaran layar
  • Kiri adalah hasil saat ini
  • Benar adalah hasil skala

Ubah Ukuran Kolom

Ini sedikit lebih rumit dan HARUS tidak pernah diterapkan ke JTable yang sudah ada di layar, karena ini akan mengacaukan tampilan sebenarnya...

Pada dasarnya, saat tabel dicetak, kita akan mengganti lebar kolom untuk memberikan ruang yang sama di seluruh halaman...

Pertama, kita perlu mengubah totalColWidth di TablePrintable dari...

private final int totalColWidth;

untuk

private int totalColWidth;

karena kita harus dapat mengubah nilai setelah diinisialisasi...

Selanjutnya, kita memerlukan flag untuk menentukan apakah kolom telah dimodifikasi atau tidak, karena percuma jika harus memperbarui ukurannya berulang kali setiap kali print disebut.

Tambahkan private boolean updateColumnWidths; ke bidang TablePrintable (misalnya, di bawah private final Font footerFont; )

Sekarang, ketika print dipanggil, kita perlu membuat serangkaian keputusan...

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;

    }
    //...

Yang menghasilkan sesuatu seperti...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jsonb vs jsonb[] untuk beberapa alamat untuk pelanggan

  2. Menggunakan psql bagaimana cara membuat daftar ekstensi yang diinstal dalam database?

  3. instal permata pg tidak dapat mengikat ke libpq

  4. Tidak dapat menemukan titik masuk bernama 'InterlockedIncrement' di DLL 'kernel32.dll' - [dilindungi email] 64 bit

  5. PostgreSQL 11:Peninjau Patch untuk Mempartisi Patch