PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Bảng in không vừa với kích thước trang

Có hai tùy chọn khả thi mà bạn có, bạn có thể thử và thay đổi kích thước các cột để được phân bổ đồng đều trên chiều rộng trang có sẵn HOẶC bạn có thể chia tỷ lệ đầu ra kết quả LÊN để nó phù hợp với trang.

Chia tỷ lệ

Theo mặc định, TablePrintable chỉ quy mô DOWN, buộc JTable quá lớn để vừa với kích thước trang có sẵn (chiều rộng). Bạn có thể thay đổi điều này để cho phép nó cũng mở rộng quy mô.

Đoạn mã tính toán tỷ lệ nằm trong print của TablePrintable lớp và trông giống như ...

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

Phần chúng tôi quan tâm là if câu lệnh có nội dung "nếu printmode bằng FIT_WIDTH VÀ totalColWidth lớn hơn chiều rộng trang" ... Chúng tôi muốn thay đổi điều này thành chỉ đọc "" nếu printmode bằng FIT_WIDTH "...

Bạn có thể thay đổi

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

đến

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

hiện sẽ cho phép TablePrintable để chia tỷ lệ bảng LÊN và XUỐNG ...

Điều này sẽ dẫn đến một cái gì đó giống như ...

  • Trên cùng là đầu ra màn hình
  • Còn lại là kết quả hiện tại
  • Đúng là kết quả được chia tỷ lệ

Thay đổi kích thước các cột

Điều này phức tạp hơn một chút và KHÔNG NÊN áp dụng cho JTable đã có trên màn hình, vì điều này sẽ làm rối loạn cách nó thực sự được hiển thị ...

Về cơ bản, khi bảng được in, chúng tôi sẽ ghi đè chiều rộng cột để cung cấp cho chúng không gian bằng nhau trên trang ...

Đầu tiên, chúng ta cần thay đổi totalColWidth trong TablePrintable từ ...

private final int totalColWidth;

đến

private int totalColWidth;

bởi vì chúng tôi cần có thể sửa đổi giá trị sau khi nó được khởi tạo ...

Tiếp theo, chúng ta cần một cờ để xác định xem các cột đã được sửa đổi hay chưa, vì thật lãng phí khi phải cập nhật lại kích thước của chúng mỗi lần print được gọi là.

Thêm private boolean updateColumnWidths; đến các trường của TablePrintable (ví dụ:trong private final Font footerFont; )

Bây giờ, khi print được gọi, chúng tôi cần đưa ra một loạt quyết định ...

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;

    }
    //...

Điều này tạo ra một cái gì đó giống như ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. django.db.utils.OperationalError Không thể kết nối với máy chủ

  2. Kết nối PostgreSQL Pooling với PgBouncer

  3. Psql không thể kết nối với máy chủ:Không có tệp hoặc thư mục như vậy, lỗi 5432?

  4. chú thích ngủ đông thích hợp cho byte []

  5. MySQL và PostgreSQL? Tôi nên chọn cái nào cho dự án Django của mình?