Print

Print


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