gpt4 book ai didi

java - 如何在特定坐标处以pdf格式导出完整的JTable组件

转载 作者:搜寻专家 更新时间:2023-10-31 19:29:20 24 4
gpt4 key购买 nike

在我的项目中,我必须以 pdf 格式打印 JTable 组件,其中包含所有自定义项(如边框、颜色等)。对于这个要求,我稍微搜索了一下,找到了一个代码来打印 pdf 中的 JTable。但是在打印之后我发现表格的第一行和第一列的边框丢失了而且我没有找到在某个特定坐标处打印的方法。请看下面的具体代码:-

package com.jpmorgan.dqreport;

import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.io.FileOutputStream;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;

import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfWriter;

public class JTable2Pdf extends JFrame {
private JTable table;

public JTable2Pdf() {
getContentPane().setLayout(new BorderLayout());
createTable();
}
private void createTable() {
Object[][] data = {
{"Kathy", "Smith",
"SnowboardingXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};

table = new JTable(data, columnNames);

JPanel tPanel = new JPanel(new BorderLayout());
tPanel.add(table.getTableHeader(), BorderLayout.NORTH);
tPanel.add(table, BorderLayout.CENTER);

getContentPane().add(tPanel, BorderLayout.CENTER);
}
private void print() {
Document document = new Document(PageSize.A4.rotate());
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\jTable.pdf"));

document.open();
PdfContentByte cb = writer.getDirectContent();

cb.saveState();
Graphics2D g2 = cb.createGraphics(500, 500);

Shape oldClip = g2.getClip();
g2.clipRect(10, 0, 500, 500);

table.print(g2);
g2.setClip(oldClip);

g2.dispose();
cb.restoreState();
} catch (Exception e) {
System.err.println(e.getMessage());
}
document.close();
}
public static void main(String[] args) {
JTable2Pdf frame = new JTable2Pdf();
frame.pack();
frame.setVisible(true);
frame.print();
}
}

请建议以某种方式在特定坐标处打印整个 JTable。

谢谢

最佳答案

众所周知,JTable 很难正确呈现图像(或者我猜是打印)。参见 this thread一些专家对此提出了建议。

仔细查看该线程的屏幕截图表明默认的 Metal 表格在最左侧没有边框。

不过,Nimbus PLAF 中的表格可以。

关于java - 如何在特定坐标处以pdf格式导出完整的JTable组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com