Package org.xhtmlrenderer.simple

Source Code of org.xhtmlrenderer.simple.XHTMLPrintable

package org.xhtmlrenderer.simple;

import org.xhtmlrenderer.extend.TextRenderer;
import org.xhtmlrenderer.util.Uu;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;

/**
* <p>XHTMLPrintable allows you to print XHTML content to a printer instead of
* rendering it to screen.  It is an implementation of @see java.awt.print.Printable
* so you can use it any where you would use any other Printable object. The constructor
* requires an XHTMLPanel, so it's easiest to prepare an XHTMLPanel as normal, and then
* wrap a printable around it.ex:
* </p>
* <p/>
* <pre>
* import org.xhtmlrenderer.simple.*;
* import java.awt.print.*;
* // . . . .
* // xhtml_panel created earlier
* <p/>
* PrinterJob printJob = PrinterJob.getPrinterJob();
* printJob.setPrintable(new XHTMLPrintable(xhtml_panel));
* <p/>
* if(printJob.printDialog()) {
* printJob.print();
* }
* </pre>
*/

public class XHTMLPrintable implements Printable {

    protected XHTMLPanel panel;
    protected Graphics2DRenderer g2r = null;


    /**
     * Creates a new XHTMLPrintable that will print
     * the current contents of the passed in XHTMLPanel.
     *
     * @param panel the XHTMLPanel to print
     */
    public XHTMLPrintable(XHTMLPanel panel) {
        this.panel = panel;
    }


    /**
     * <p>The implementation of the <i>print</i> method
     * from the @see java.awt.print.Printable interface.
     */
    public int print(Graphics g, PageFormat pf, int page) {
        try {

            Graphics2D g2 = (Graphics2D) g;
           
            if (g2r == null) {
                g2r = new Graphics2DRenderer();
                g2r.getSharedContext().setPrint(true);
                g2r.getSharedContext().setInteractive(false);
                g2r.getSharedContext().setDPI(72f);
                g2r.getSharedContext().getTextRenderer().setSmoothingThreshold(0);
                g2r.getSharedContext().getTextRenderer().setSmoothingLevel(TextRenderer.HIGH);
                g2r.getSharedContext().setUserAgentCallback(panel.getSharedContext().getUserAgentCallback());
                g2r.setDocument(panel.getDocument(), panel.getSharedContext().getUac().getBaseURL());
                g2r.getSharedContext().setReplacedElementFactory(panel.getSharedContext().getReplacedElementFactory());
                g2r.layout(g2, null);
                g2r.getPanel().assignPagePrintPositions(g2);
            }
           
            if (page >= g2r.getPanel().getRootLayer().getPages().size()) {
                return Printable.NO_SUCH_PAGE;
            }
           
            // render the document
            g2r.getPanel().paintPage(g2, page);
           
            return Printable.PAGE_EXISTS;
        } catch (Exception ex) {
            Uu.p(ex);
            return Printable.NO_SUCH_PAGE;
        }
    }
}
TOP

Related Classes of org.xhtmlrenderer.simple.XHTMLPrintable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.