Path: csiph.com!x330-a1.tempe.blueboxinc.net!feeder1.hal-mli.net!news.glorb.com!news-out.readnews.com!transit3.readnews.com!news-out.news.tds.net!newsreading01.news.tds.net!86597e80!not-for-mail From: "Michael Dunn" Subject: Re: how to print the data Message-ID: <456c6927$1@dnews.tpgi.com.au> X-Comment-To: comp.lang.java.gui Newsgroups: comp.lang.java.gui In-Reply-To: <1164694016.524437.241360@45g2000cws.googlegroups.com> References: <1164694016.524437.241360@45g2000cws.googlegroups.com> Content-Type: text/plain; charset=IBM437 Content-Transfer-Encoding: 8bit X-Gateway: time.synchro.net [Synchronet 3.15a-Win32 NewsLink 1.92] Lines: 254 Date: Wed, 27 Apr 2011 15:26:20 GMT NNTP-Posting-Host: 96.60.20.240 X-Complaints-To: news@tds.net X-Trace: newsreading01.news.tds.net 1303917980 96.60.20.240 (Wed, 27 Apr 2011 10:26:20 CDT) NNTP-Posting-Date: Wed, 27 Apr 2011 10:26:20 CDT Organization: TDS.net Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.gui:228 To: comp.lang.java.gui "ashwinijain" wrote in message news:1164694016.524437.241360@45g2000cws.googlegroups.com... > > thanks but i want to print the java components on paper.. > how can i print it.. > how to use printable class? from sun's forums, author of Standard/SpecialPrint is Tom Jacobs I'd post a link, but I had to modify a couple of things to get it to work, so easier to post the code. (don't ask me how it works, I have no idea) import java.awt.Dimension; import java.awt.Graphics; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.print.*; import javax.print.PrintException; import javax.swing.*; import java.awt.event.*; class Testing { public void buildGUI() { JFrame.setDefaultLookAndFeelDecorated(true); JPanel p = new JPanel(new GridLayout(2,1)); p.add(new JLabel("Hello")); JButton btn = new JButton("World"); p.add(btn); final JFrame f = new JFrame(); f.getContentPane().add(p); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ StandardPrint sp = new StandardPrint(f);//<----f is the component to print try{sp.start();}catch(Exception e){} } }); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run(){ new Testing().buildGUI(); } }); } } class StandardPrint implements Printable, Pageable { Component c; SpecialPrint sp; PageFormat mFormat; boolean mScale = false; boolean mMaintainRatio = true; public StandardPrint(Component c) { this.c = c; if (c instanceof SpecialPrint) { sp = (SpecialPrint)c; } } public StandardPrint(SpecialPrint sp) { this.sp = sp; } public boolean isPrintScaled () { return mScale; } public void setPrintScaled(boolean b) { mScale = b; } public boolean getMaintainsAspect() { return mMaintainRatio; } public void setMaintainsAspect(boolean b) { mMaintainRatio = b; } public void start() throws PrinterException { PrinterJob job = PrinterJob.getPrinterJob(); if (mFormat == null) { mFormat = job.defaultPage(); } job.setPageable(this); if (job.printDialog()) { job.print(); } } public void setPageFormat (PageFormat pf) { mFormat = pf; } public void printStandardComponent (Pageable p) throws PrinterException { PrinterJob job = PrinterJob.getPrinterJob(); job.setPageable(p); job.print(); } private Dimension getJobSize() { if (sp != null) { return sp.getPrintSize(); } else { return c.getSize(); } } public static Image preview (int width, int height, Printable sp, PageFormat pf, int pageNo) { BufferedImage im = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); return preview (im, sp, pf, pageNo); } public static Image preview (Image im, Printable sp, PageFormat pf, int pageNo) { Graphics2D g = (Graphics2D) im.getGraphics(); int width = im.getWidth(null); int height = im.getHeight(null); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); double hratio = height / pf.getHeight(); double wratio = width / pf.getWidth(); //g.scale(hratio, wratio); try { sp.print(g, pf, pageNo); } catch(PrinterException pe) { pe.printStackTrace(); } g.dispose(); return im; } public int print(Graphics gr, PageFormat format, int pageNo) { mFormat = format; if (pageNo > getNumberOfPages()) { return Printable.NO_SUCH_PAGE; } Graphics2D g = (Graphics2D) gr; g.drawRect(0, 0, (int)format.getWidth(), (int)format.getHeight()); g.translate((int)format.getImageableX(), (int)format.getImageableY()); Dimension size = getJobSize(); if (!isPrintScaled()) { int horizontal = getNumHorizontalPages(); int vertical = getNumVerticalPages(); int horizontalOffset = (int) ((pageNo % horizontal) * format.getImageableWidth()); int verticalOffset = (int) ((pageNo / vertical) * format.getImageableHeight()); double ratio = getScreenRatio(); g.scale(1 / ratio, 1 / ratio); g.translate(-horizontalOffset, -verticalOffset); if (sp != null) { sp.printerPaint(g); } else { c.paint(g); } g.translate(horizontal, vertical); g.scale(ratio, ratio); } else { double ratio = getScreenRatio(); g.scale(1 / ratio, 1 / ratio); double xScale = 1.0; double yScale = 1.0; double wid; double ht; if (sp != null) { wid = sp.getPrintSize().width; ht = sp.getPrintSize().height; } else { wid = c.getWidth(); ht = c.getHeight(); } xScale = format.getImageableWidth() / wid; yScale = format.getImageableHeight() / ht; if (getMaintainsAspect()) { xScale = yScale = Math.min(xScale, yScale); } g.scale(xScale, yScale); if (sp != null) { sp.printerPaint(g); } else { c.paint(g); } g.scale(1 / xScale, 1 / yScale); g.scale(ratio, ratio); } g.translate((int)-format.getImageableX(), (int)-format.getImageableY()); return Printable.PAGE_EXISTS; } public int getNumHorizontalPages() { Dimension size = getJobSize(); int imWidth = (int)mFormat.getImageableWidth(); int pWidth = 1 + (int)(size.width / getScreenRatio() / imWidth) - (imWidth == size.width ? 1 : 0); return pWidth; } private double getScreenRatio () { double res = Toolkit.getDefaultToolkit().getScreenResolution(); double ratio = res / 72.0; return ratio; } public int getNumVerticalPages() { Dimension size = getJobSize(); int imHeight = (int)mFormat.getImageableHeight(); int pHeight = (int) (1 + (size.height / getScreenRatio() / imHeight)) - (imHeight == size.height ? 1 : 0); return pHeight; } public int getNumberOfPages() { if (isPrintScaled()) return 1; return getNumHorizontalPages() * getNumVerticalPages(); } public Printable getPrintable(int i) { return this; } public PageFormat getPageFormat(int page) { if (mFormat == null) { PrinterJob job = PrinterJob.getPrinterJob(); mFormat = job.defaultPage(); } return mFormat; } } interface SpecialPrint { public Dimension getPrintSize(); public void printerPaint(Graphics g); } --- * Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet! --- Synchronet 3.15a-Win32 NewsLink 1.92 Time Warp of the Future BBS - telnet://time.synchro.net:24