Author: [log in to unmask] Date: Wed May 13 19:37:33 2015 New Revision: 2964 Log: Cleanup PDF export utility class. Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/ExportPdf.java Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/ExportPdf.java ============================================================================= --- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/ExportPdf.java (original) +++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/ExportPdf.java Wed May 13 19:37:33 2015 @@ -2,23 +2,18 @@ import hep.aida.IPlotter; import hep.aida.jfree.plotter.Plotter; -import hep.aida.jfree.plotter.PlotterRegion; -import java.awt.AWTException; import java.awt.Component; import java.awt.Image; -import java.awt.Point; -import java.awt.Robot; -import java.awt.event.InputEvent; -import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; +import org.lcsim.util.log.DefaultLogFormatter; +import org.lcsim.util.log.LogUtil; import com.itextpdf.text.BadElementException; import com.itextpdf.text.Document; @@ -38,6 +33,11 @@ public final class ExportPdf { /** + * Setup logging. + */ + private static Logger LOGGER = LogUtil.create(ExportPdf.class, new DefaultLogFormatter(), Level.ALL); + + /** * Do not allow class instantiation. */ private ExportPdf() { @@ -51,7 +51,10 @@ * @param runData the list of run data to save on the cover page * @throws IOException if there is a problem with the IO (e.g. writing to PDF file) */ - public static void write(JTabbedPane plotTabs, String fileName, List<String> runData) throws IOException { + public static void write(List<IPlotter> plotters, String fileName, List<String> runData) + throws IOException { + + LOGGER.info("writing plots to " + fileName + " ..."); // Open the document and the writer. Document document = new Document(PageSize.LETTER.rotate(), 50, 50, 50, 50); @@ -65,90 +68,35 @@ // Create 1st page with run summary data. try { - writeRunData(document, runData); + writeRunData(document, runData); } catch (DocumentException e) { throw new IOException(e); } - PlotterRegistry plotterRegistry = MonitoringPlotFactory.getPlotterRegistry(); - - int savedTabIndex = plotTabs.getSelectedIndex(); - int savedSubTabIndex = ((JTabbedPane) plotTabs.getComponentAt(savedTabIndex)).getSelectedIndex(); - - for (int tabIndex = 0; tabIndex < plotTabs.getTabCount(); tabIndex++) { - plotTabs.setSelectedIndex(tabIndex); - JTabbedPane subPane = (JTabbedPane) plotTabs.getSelectedComponent(); - for (int subTabIndex = 0; subTabIndex < subPane.getTabCount(); subTabIndex++) { - subPane.setSelectedIndex(subTabIndex); - String title = null; - IPlotter plotter = plotterRegistry.find(tabIndex, subTabIndex); - if (plotter != null) { - title = plotter.title(); - } else { - title = ((JLabel) subPane.getTabComponentAt(subTabIndex)).getText(); - } - if (plotter != null) { - plotter.refresh(); - } - Component component = subPane.getSelectedComponent(); - if (component != null) { - document.newPage(); - Image image = getImage(component); - writePage(document, writer, title, image); - } - } + // Write the graphics from each plotter on a new page. + for (IPlotter plotter : plotters) { + plotter.refresh(); + document.newPage(); + writePage(document, writer, plotter); } document.close(); - plotTabs.setSelectedIndex(savedTabIndex); - ((JTabbedPane) plotTabs.getComponentAt(savedTabIndex)).setSelectedIndex(savedSubTabIndex); + LOGGER.info("done writing plots to " + fileName); } /** - * Write plotter graphics into a single PDF page. - * - * @param document the output PDF document - * @param writer the PDF writer - * @param plotter the plotter with the graphics - * @throws IOException if there is a problem writing to the PDF document - */ - static void writePage(Document document, PdfWriter writer, String title, JPanel component) throws IOException { - - // Add header label. - Paragraph p = new Paragraph(title, new Font(FontFamily.HELVETICA, 24)); - p.setAlignment(Element.ALIGN_CENTER); - try { - document.add(p); - } catch (DocumentException e) { - throw new IOException(e); - } - - // Write image into the document. - com.itextpdf.text.Image iTextImage = null; - try { - iTextImage = com.itextpdf.text.Image.getInstance(writer, getImage(component), 1f); - } catch (BadElementException e) { - throw new IOException(e); - } - iTextImage.scaleToFit(document.getPageSize()); - iTextImage.setAlignment(Element.ALIGN_CENTER); - try { - document.add(iTextImage); - } catch (DocumentException e) { - throw new IOException(e); - } - } - - /** - * Write a buffered image into a single PDF page. + * Write a plotter's graphics into a single PDF page. * * @param document the output PDF document * @param writer the PDF writer * @param image the buffered bitmap image * @throws IOException if there is a problem writing to the PDF document */ - static void writePage(Document document, PdfWriter writer, String title, Image image) throws IOException { + static void writePage(Document document, PdfWriter writer, IPlotter plotter) throws IOException { + + Image image = ((Plotter)plotter).getImage(); + String title = plotter.title(); // Add header label. Paragraph p = new Paragraph(title, new Font(FontFamily.HELVETICA, 24)); @@ -176,44 +124,6 @@ } /** - * Write the graphics from a list of plotters to a PDF, with one plotter per page, including a summary page with the - * run data. - * - * @param plotters the list of plotters - * @param fileName the output file name - * @param runData a list of run data to include on the first page - * @throws IOException if there is a problem opening or writing to the PDF document - */ - public static void write(List<IPlotter> plotters, String fileName, List<String> runData) throws IOException { - - // Open the document and the writer. - Document document = new Document(PageSize.LETTER.rotate(), 50, 50, 50, 50); - PdfWriter writer; - try { - writer = PdfWriter.getInstance(document, new FileOutputStream(fileName)); - } catch (DocumentException e) { - throw new IOException(e); - } - document.open(); - - // Create 1st page with run summary data. - try { - writeRunData(document, runData); - } catch (DocumentException e) { - throw new IOException(e); - } - - // Write out the plots to the PDF, one page per plotter. - for (int i = 0; i < plotters.size(); i++) { - document.newPage(); - IPlotter plotter = plotters.get(i); - writePage(document, writer, plotter); - } - - document.close(); - } - - /** * Get a buffered image from a Swing component. * * @param component the Swing component @@ -226,47 +136,9 @@ } /** - * Write plotter graphics into a single PDF page. - * - * @param document the output PDF document - * @param writer the PDF writer - * @param plotter the plotter with the graphics - * @throws IOException if there is a problem writing to the PDF document - */ - static void writePage(Document document, PdfWriter writer, IPlotter plotter) throws IOException { - - // Add header label. - Paragraph p = new Paragraph(plotter.title(), new Font(FontFamily.HELVETICA, 24)); - p.setAlignment(Element.ALIGN_CENTER); - try { - document.add(p); - } catch (DocumentException e) { - throw new IOException(e); - } - - // Create image from the panel. - Image awtImage = ((Plotter) plotter).getImage(); - - // Write image into the document. - com.itextpdf.text.Image iTextImage = null; - try { - iTextImage = com.itextpdf.text.Image.getInstance(writer, awtImage, 1f); - } catch (BadElementException e) { - throw new IOException(e); - } - iTextImage.scaleToFit(document.getPageSize()); - iTextImage.setAlignment(Element.ALIGN_CENTER); - try { - document.add(iTextImage); - } catch (DocumentException e) { - throw new IOException(e); - } - } - - /** * Add a page with the run summary data. * - * @param runData The list of run summary information. + * @param runData the list of run summary information */ static void writeRunData(Document document, List<String> runData) throws DocumentException { for (String line : runData) { @@ -275,30 +147,4 @@ document.add(p); } } - - /** - * This is a hack to try and get a plotter's chart components their scaling by poking them each with a mouse event. - * - * @param plotter the AIDA plotter - */ - static void poke(IPlotter plotter) { - int nregions = plotter.numberOfRegions(); - for (int regionIndex = 0; regionIndex < nregions; regionIndex++) { - JPanel panel = ((PlotterRegion) plotter.region(regionIndex)).getPanel(); - if (panel != null) { - int b = InputEvent.getMaskForButton(MouseEvent.BUTTON1); - Robot r = null; - try { - r = new Robot(); - Point location = panel.getLocationOnScreen(); - r.mouseMove(location.x, location.y); - r.mousePress(b); - r.mouseRelease(b); - } catch (AWTException e) { - e.printStackTrace(); - } - } - } - } - }