Author: [log in to unmask] Date: Fri Mar 27 11:20:02 2015 New Revision: 3580 Log: Add class for writing out plotter graphics to a PDF. Added: projects/lcsim/trunk/aida/src/main/java/org/lcsim/util/aida/PDFWriter.java Modified: projects/lcsim/trunk/aida/pom.xml Modified: projects/lcsim/trunk/aida/pom.xml ============================================================================= --- projects/lcsim/trunk/aida/pom.xml (original) +++ projects/lcsim/trunk/aida/pom.xml Fri Mar 27 11:20:02 2015 @@ -38,6 +38,11 @@ <groupId>org.freehep</groupId> <artifactId>freehep-record</artifactId> </dependency> + <dependency> + <groupId>org.apache.pdfbox</groupId> + <artifactId>pdfbox</artifactId> + <version>1.8.8</version> + </dependency> </dependencies> <build> <plugins> Added: projects/lcsim/trunk/aida/src/main/java/org/lcsim/util/aida/PDFWriter.java ============================================================================= --- projects/lcsim/trunk/aida/src/main/java/org/lcsim/util/aida/PDFWriter.java (added) +++ projects/lcsim/trunk/aida/src/main/java/org/lcsim/util/aida/PDFWriter.java Fri Mar 27 11:20:02 2015 @@ -0,0 +1,89 @@ +package org.lcsim.util.aida; + +import hep.aida.IAnalysisFactory; +import hep.aida.IHistogram1D; +import hep.aida.IHistogramFactory; +import hep.aida.IPlotter; +import hep.aida.IPlotterFactory; +import hep.aida.ref.AnalysisFactory; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Random; + +import org.apache.pdfbox.exceptions.COSVisitorException; +import org.apache.pdfbox.util.PDFMergerUtility; + +/** + * Write out plotter graphics to a PDF file. + * + * @author Jeremy McCormick <[log in to unmask]> + */ +public class PDFWriter { + + /** + * Create PDF files from plotters and merge them into a single file with one plot per page. + * @param plotters The list of plotters. + * @param fileName The name of the output file. + * @throws IOException If there is a problem merging the PDFs together. + */ + public static void write(Collection<IPlotter> plotters, String fileName) throws IOException { + + PDFMergerUtility merge = new PDFMergerUtility(); + merge.setDestinationFileName(fileName); + + List<File> files = new ArrayList<File>(); + for (IPlotter plotter : plotters) { + File tempFile = File.createTempFile("plots", ".pdf"); + files.add(tempFile); + plotter.writeToFile(tempFile.getPath(), "pdf"); + merge.addSource(tempFile); + } + + try { + merge.mergeDocuments(); + } catch (COSVisitorException e) { + throw new IOException("Error merging documents", e); + } + } + + /** + * This is just a simple test that writes a few plots. + * @param args + */ + public static void main(String[] args) { + + IAnalysisFactory af = AnalysisFactory.create(); + IPlotterFactory pf = af.createPlotterFactory(); + IHistogramFactory hf = af.createHistogramFactory(null); + + IHistogram1D histogram1 = hf.createHistogram1D("Histogram 1", 100, 0., 10.); + IHistogram1D histogram2 = hf.createHistogram1D("Histogram 2", 100, 0., 10.); + Random random = new Random(); + for (int i = 0; i < 10000; i++) { + histogram1.fill(random.nextDouble() * 10); + histogram2.fill(random.nextDouble() * 10); + } + + IPlotter plotter1 = pf.create(); + plotter1.createRegion(); + plotter1.region(0).plot(histogram1); + + IPlotter plotter2 = pf.create(); + plotter2.createRegion(); + plotter2.region(0).plot(histogram2); + + List<IPlotter> plotters = new ArrayList<IPlotter>(); + plotters.add(plotter1); + plotters.add(plotter2); + + try { + PDFWriter.write(plotters, "PDFWriterTest.pdf"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} ######################################################################## Use REPLY-ALL to reply to list To unsubscribe from the LCDET-SVN list, click the following link: https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1