2012-10-08 16 views
5

在我的項目中,我必須以pdf格式打印所有自定義項(如邊框,顏色等)的JTable組件。爲了這個要求,我搜索了一下,發現了一個代碼來打印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在一個特定的座標。

感謝

回答

4

您好我加入像下面解決了代碼: -

cb.saveState(); 

PdfTemplate pdfTemplate = cb.createTemplate(table.getWidth(), table.getHeight()); 
Graphics2D g2 = pdfTemplate.createGraphics(table.getWidth(), table.getHeight()); 
/*g2.setColor(Color.BLACK); 
g2.drawRect(x-2, y-2, table.getWidth()+2, table.getHeight()+2);*/ 
table.print(g2); 
System.out.println("x="+x + "," + "y=" + y); 
cb.addTemplate(pdfTemplate, x, y); 
g2.dispose(); 
cb.restoreState(); 
6

一個JTable是非常困難的圖像得到正確呈現(或者我猜,打印)。請參閱this thread,其中一些大師重量與提示。

仔細觀察該線程的屏幕截圖,表明默認的金屬表在最左側沒有邊框。

在雨雲PLAF表幹,雖然。

+2

+1 Nimbus外觀 – mKorbel

相關問題