2016-09-16 8 views
5

मैं अपने प्रोजेक्ट काम के लिए जावा में डेस्कटॉप ऐप विकसित कर रहा हूं। मुझे JTable से टैब्यूलर डेटा के साथ उप कुल और कुल फ़ील्ड के साथ एक चालान मुद्रित करने की आवश्यकता है। मैं तालिका को मुद्रित करने में सक्षम हूं लेकिन एक ही पृष्ठ में नहीं। i.e पहले पृष्ठ में जेटीबल प्रिंट्स और उप-योग, अगले पृष्ठ में कुल प्रिंट। क्या एक ही पृष्ठ में दोनों डेटा प्रिंट करने का कोई तरीका है। मैं रिपोर्टिंग इंजन का उपयोग नहीं करना चाहता। बस अंतर्निहित जावा मुद्रण सेवाओं का उपयोग करें। कृपया मेरा मार्ग दर्शन कीजिए।जावा में प्रिंटिंग जेटीबल और अन्य टेक्स्टफील्ड

प्रिंट प्रारूप के रूप में मैं चाहता हूँ:

enter image description here

के बाद आंकड़ा जीयूआई

enter image description here

से पता चलता और निम्न चित्र रिपोर्ट मैं अब तक हो रही है पता चलता है। यह सही प्रारूप में नहीं है। कृपया मदद

enter image description here

कोड के रूप में

 JLabel title = new JLabel(); 
     title.setText("Invoice"); 
     title.setBounds(300, 200, 80, 30); 


     JTextField subTotal = new JTextField(); 
     subTotal.setText("Sub Total : Rs. " + SubTotal.getText()); 
     subTotal.setBounds(400, 200, 150, 30); 


     MyPrintable prt = new MyPrintable(); 
     prt.addComponent(title); 
     prt.addComponent(billTable); //billTable is the JTable 
     prt.addComponent(subTotal); 
     prt.printIt(); 

इस प्रकार है और नीचे दी गई मेरी मुद्रण योग्य वर्ग है

class MyPrintable implements Printable 
{ 
private ArrayList<JComponent> items; 

public MyPrintable() 
{ 
    items = new ArrayList<>(); 
} 
@Override 
public int print(Graphics g, PageFormat pf, int page) throws PrinterException 
{ 
    if(page > 0) return Printable.NO_SUCH_PAGE; 
    Graphics2D g2 = (Graphics2D)g; 
    g2.translate(pf.getImageableX(), pf.getImageableY()); 


    for(JComponent item : items) 
    { 
     item.setLayout(null); 
     // item.setBounds(500, 500, 200, 200); 
     item.printAll(g); 
     g2.translate(0, item.getHeight()); 
    } 
    return Printable.PAGE_EXISTS; 
} 

public void printIt() 
{ 
    PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();; 
    PrinterJob job = PrinterJob.getPrinterJob(); 
    try 
    { 
     job.setPrintable(this); 
     if(job.printDialog(attributes)) 
      job.print(attributes); 
    } 
    catch (PrinterException e) 
    { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

public void addComponent(JComponent component) { items.add(component); } 
} 
+0

आप सभी कर्मचारियों की जरूरत के साथ एक पृष्ठ (पैनल) बना सकते हैं और इसे प्रिंट करने की कोशिश की दिखेगा? –

+0

@SergiyMedvynskyy मैंने सवाल संपादित किया है। – Redone

+0

अपना कोड देखने के बिना मैं आपकी मदद कैसे कर सकता हूं? कृपया एक [एसएससीसीई] (http://sscce.org) प्रदान करें, इसलिए मैं (या कोई और) आपकी मदद करने की कोशिश कर सकता हूं। –

उत्तर

2

आप निर्देशांक आपने पर अपने सभी सामान प्रिंट करना चाहते हैं सेट करें, आपको या तो एक नया पैनल बनाने की जरूरत है, इस पैनल में प्रिंट करने के लिए अपने सभी घटक डालें, और इस पैनल को मुद्रित करने के लिए या आपको अपने प्राइ में सभी घटकों का अनुवाद करने की आवश्यकता है सही निर्देशांक के लिए एनटी विधि।

दूसरा तरीका की तरह

public int print(Graphics g, PageFormat pf, int page) throws PrinterException 
{ 
    if(page > 0) return Printable.NO_SUCH_PAGE; 
    Graphics2D g2 = (Graphics2D)g; 
    g2.translate(pf.getImageableX(), pf.getImageableY()); 


    for(JComponent item : items) 
    { 
     g2.translate(item.getX(), item.getY()); 
     item.printAll(g); 
     g2.translate(-item.getX(), -item.getY()); // bring all back to default coordinates 
    } 
    return Printable.PAGE_EXISTS; 
} 
संबंधित मुद्दे