/* * PrintUtilities.java */ package net.sf.openrocket.gui.print; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import javax.swing.RepaintManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; /** * Utilities methods and fonts used for printing. */ public class PrintUtilities implements Printable { /** * The logger. */ private static final Logger log = LoggerFactory.getLogger(PrintUtilities.class); public static final int NORMAL_FONT_SIZE = Font.DEFAULTSIZE - 3; public static final int SMALL_FONT_SIZE = NORMAL_FONT_SIZE - 3; public static final Font BOLD = new Font(ITextHelper.getBaseFont(), NORMAL_FONT_SIZE, Font.BOLD); public static final Font BIG_BOLD = new Font(ITextHelper.getBaseFont(), NORMAL_FONT_SIZE + 3, Font.BOLD); public static final Font BOLD_UNDERLINED = new Font(ITextHelper.getBaseFont(), NORMAL_FONT_SIZE, Font.BOLD | Font.UNDERLINE); public static final Font NORMAL = new Font(ITextHelper.getBaseFont(), NORMAL_FONT_SIZE); public static final Font SMALL = new Font(ITextHelper.getBaseFont(), SMALL_FONT_SIZE); private Component componentToBePrinted; public PrintUtilities(Component componentToBePrinted) { this.componentToBePrinted = componentToBePrinted; } @Override public int print(Graphics g, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) { return (NO_SUCH_PAGE); } else { Graphics2D g2d = (Graphics2D) g; translateToJavaOrigin(g2d, pageFormat); disableDoubleBuffering(componentToBePrinted); componentToBePrinted.paint(g2d); enableDoubleBuffering(componentToBePrinted); return (PAGE_EXISTS); } } public static void disableDoubleBuffering(Component c) { RepaintManager currentManager = RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(false); } public static void enableDoubleBuffering(Component c) { RepaintManager currentManager = RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(true); } /** * Translate the page format coordinates onto the graphics object using Java's origin (top left). * * @param g2d the graphics object * @param pageFormat the print page format */ public static void translateToJavaOrigin(Graphics2D g2d, PageFormat pageFormat) { g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); } /** * Add text as a new paragraph in a given font to the document. * * @param document the document * @param font the font * @param title the title */ public static void addText(Document document, com.itextpdf.text.Font font, String title) { Chunk sectionHeader = new Chunk(title); sectionHeader.setFont(font); try { Paragraph p = new Paragraph(); p.add(sectionHeader); document.add(p); } catch (DocumentException e) { log.error("Could not add paragraph.", e); } } }