2012-10-08 64 views
5

पर पीडीएफ में एक पूर्ण जेटीबल घटक कैसे निर्यात करें मेरी परियोजना में मुझे सभी अनुकूलन (जैसे सीमाओं, रंग इत्यादि) के साथ पीडीएफ में जेटीबल घटकों को प्रिंट करना होगा। इस आवश्यकता के लिए मैंने थोड़ी सी खोज की और पीडीएफ में जेटीबल प्रिंट करने के लिए एक कोड मिला। लेकिन प्रिंटिंग के बाद मैंने पाया कि पहली पंक्ति के लिए तालिका की सीमा और 1 कॉलम गायब हैं और मुझे कुछ विशिष्ट समन्वय पर प्रिंट करने का कोई तरीका नहीं मिला। कृपया नीचे दिए गए विशिष्ट कोड को देखें: -एक विशिष्ट समन्वय

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

कृपया किसी विशिष्ट समन्वय पर संपूर्ण जेटीबल को मुद्रित करने के लिए किसी भी तरह का सुझाव दें।

धन्यवाद

उत्तर

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 निंबस देखो और महसूस – mKorbel