]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.trend/src/org/simantics/trend/util/PrintUtil.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.trend / src / org / simantics / trend / util / PrintUtil.java
index c81288e25fc1a395ddd5976f3ea0994adb2623e4..9d1665e957fe0400cfe508286251cb803a5a82f2 100644 (file)
-/*******************************************************************************\r
-' * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.trend.util;\r
-\r
-import java.awt.Graphics;\r
-import java.awt.Graphics2D;\r
-import java.awt.geom.Rectangle2D;\r
-import java.awt.print.PageFormat;\r
-import java.awt.print.Printable;\r
-import java.awt.print.PrinterException;\r
-import java.awt.print.PrinterJob;\r
-import java.io.File;\r
-import java.io.FileOutputStream;\r
-import java.io.IOException;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.simantics.g2d.canvas.impl.CanvasContext;\r
-import org.simantics.history.HistoryManager;\r
-import org.simantics.trend.TrendInitializer;\r
-import org.simantics.trend.configuration.TrendSpec;\r
-import org.simantics.trend.configuration.Viewport;\r
-import org.simantics.trend.impl.MilestoneSpec;\r
-import org.simantics.trend.impl.TrendNode;\r
-import org.simantics.utils.page.MarginUtils;\r
-import org.simantics.utils.page.PageDesc;\r
-import org.simantics.utils.page.PageOrientation;\r
-import org.simantics.utils.threads.AWTThread;\r
-\r
-import com.lowagie.text.Document;\r
-import com.lowagie.text.DocumentException;\r
-import com.lowagie.text.FontFactory;\r
-import com.lowagie.text.Rectangle;\r
-import com.lowagie.text.pdf.DefaultFontMapper;\r
-import com.lowagie.text.pdf.FontMapper;\r
-import com.lowagie.text.pdf.PdfContentByte;\r
-import com.lowagie.text.pdf.PdfWriter;\r
-\r
-public class PrintUtil {\r
-\r
-       PageDesc pageDesc;\r
-    FontMapper mapper;\r
-    List<PrintPage> pages = new ArrayList<PrintPage>();\r
-       \r
-    public PrintUtil()\r
-    {\r
-       pageDesc = new PageDesc("A4", PageOrientation.Landscape, 210, 297).withMargins( MarginUtils.MARGINS_10mm );\r
-        mapper = new DefaultFontMapper();\r
-        FontFactory.registerDirectories();\r
-    }\r
-    \r
-    public void addTrendPage(TrendSpec trendSpec, HistoryManager historian, MilestoneSpec milestones, Viewport viewport)\r
-    {\r
-       pages.add( TrendPage.addTrendPage(trendSpec, historian, milestones, viewport) );\r
-    }\r
-    \r
-    public void addTrendPage(TrendNode srcTrend) {\r
-       pages.add( TrendPage.createFrom(srcTrend));\r
-    }\r
-    \r
-       public void setPageDesc(PageDesc pageDesc)\r
-       {\r
-               this.pageDesc = pageDesc;\r
-    }\r
-       \r
-       public void print() throws PrinterException {\r
-               PrinterJob printJob = PrinterJob.getPrinterJob();\r
-               printJob.setPrintable( new Printable() {\r
-                       @Override\r
-                       public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {\r
-                               if (graphics instanceof Graphics2D == false) {\r
-                                       throw new PrinterException("Printer context does not support Graphics2D");\r
-                               }\r
-                               if (pageIndex < pages.size()) {\r
-                                       Graphics2D g2d = (Graphics2D) graphics;\r
-\r
-                                       g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());                  \r
-                                       \r
-                                       Rectangle2D rect = new Rectangle2D.Double(0, 0, pageFormat.getImageableWidth(), pageFormat.getImageableHeight());\r
-                                       //g2d.setClip( rect );\r
-                                       System.out.println("Printing page "+pageIndex+", pageFormat="+pageFormat.getImageableX()+", "+pageFormat.getImageableY()+", "+pageFormat.getImageableWidth()+", "+pageFormat.getImageableHeight());\r
-                                       PrintPage trend = pages.get(pageIndex);\r
-                                       trend.print(g2d, rect);\r
-                                       \r
-                                       return PAGE_EXISTS;\r
-                               }\r
-                               return NO_SUCH_PAGE;\r
-                       }} );\r
-               printJob.printDialog();\r
-               printJob.print();\r
-       }       \r
-       \r
-       public void printPdf(File file) throws IOException\r
-       {               \r
-               Document document = null;\r
-               FileOutputStream fos = null;\r
-               Graphics2D g2 = null;\r
-               try {\r
-                       // Page area\r
-                       Rectangle2D.Float pageArea = new Rectangle2D.Float();\r
-                       pageDesc.getPageRectangle( pageArea );\r
-\r
-                       // Content area in page\r
-                       Rectangle2D.Float contentArea = new Rectangle2D.Float();\r
-                       pageDesc.getMarginsRectangle( contentArea );\r
-       \r
-                       // step 1: creation of a document-object\r
-                       Rectangle pageArea2 = new Rectangle( \r
-                                       (float) PageDesc.toPoints(pageArea.getMinX()), \r
-                                       (float) PageDesc.toPoints(pageArea.getMinY()), \r
-                                       (float) PageDesc.toPoints(pageArea.getWidth()), \r
-                                       (float) PageDesc.toPoints(pageArea.getHeight()) );\r
-                       document = new Document( pageArea2 );\r
-          \r
-                       // step 2: creation of the writer\r
-                       if ( !file.exists() ) file.createNewFile();\r
-                       fos = new FileOutputStream( file, false );\r
-                       PdfWriter writer;\r
-                       try {\r
-                               writer = PdfWriter.getInstance(document, fos);\r
-                       } catch (DocumentException e) {\r
-                               throw new IOException(e);\r
-                       }\r
-            \r
-                       // step 3: we open the document\r
-                       document.open();\r
-\r
-                       // step 4:\r
-                       for ( PrintPage page : pages ) \r
-                       {\r
-                               if (!document.newPage()) break;\r
-                               PdfContentByte cb = writer.getDirectContent();\r
-                               g2 = cb.createGraphics( pageArea2.getWidth(), pageArea2.getHeight(), mapper);\r
-                               \r
-                               Rectangle2D contentArea2 = new Rectangle2D.Float( \r
-                                               (float) PageDesc.toPoints(contentArea.getMinX()), \r
-                                               (float) PageDesc.toPoints(contentArea.getMinY()), \r
-                                               (float) PageDesc.toPoints(contentArea.getWidth()), \r
-                                               (float) PageDesc.toPoints(contentArea.getHeight()) );\r
-       \r
-                               page.print(g2, contentArea2);\r
-                       }\r
-                       \r
-        } finally {\r
-               try {\r
-                       if (g2 != null) g2.dispose();\r
-                       if (document != null) document.close();\r
-                       if (fos != null) fos.close();\r
-               } catch (Exception e) {}\r
-        }\r
-       }\r
-\r
-       interface PrintPage {\r
-               void print(Graphics2D g2d, Rectangle2D pageArea);\r
-       }\r
-       \r
-       static class TrendPage implements PrintPage\r
-       {\r
-               boolean autoscale;\r
-               TrendNode trend;\r
-               \r
-               public static TrendPage createFrom(TrendNode srcTrend)\r
-               {\r
-               TrendPage page = new TrendPage();\r
-               CanvasContext ctx = TrendInitializer.createDefaultCanvas(AWTThread.getThreadAccess(), srcTrend.historian, srcTrend.collector, null, srcTrend.getTrendSpec());\r
-               TrendNode trend = TrendInitializer.getTrendNode( ctx );        \r
-               trend.setViewport( srcTrend.getViewport() );\r
-               page.autoscale = false;\r
-               if (srcTrend.milestones != null) trend.setMilestones( srcTrend.milestones );\r
-               trend.printing = true;\r
-               page.trend = trend;\r
-               return page;\r
-               }\r
-               \r
-           public static TrendPage addTrendPage(TrendSpec trendSpec, HistoryManager historian, MilestoneSpec milestones, Viewport viewport)\r
-           {\r
-               TrendPage page = new TrendPage();\r
-               CanvasContext ctx = TrendInitializer.createDefaultCanvas(AWTThread.getThreadAccess(), historian, null, null, trendSpec);\r
-               TrendNode trend = TrendInitializer.getTrendNode( ctx );         \r
-               trend.printing = true;\r
-               if (milestones!=null) {\r
-                       trend.setMilestones(milestones);\r
-               }\r
-               if ( viewport!=null ) {\r
-                       trend.setViewport(viewport);\r
-                       page.autoscale = false;\r
-               } else {\r
-                       page.autoscale = true;\r
-               }\r
-               page.trend = trend;\r
-               return page;\r
-           }\r
-                               \r
-               public void print(Graphics2D g2d, Rectangle2D pageArea)\r
-               {\r
-                       Rectangle2D contentArea2 = new Rectangle2D.Float( \r
-                                       (float) PageDesc.toPoints(pageArea.getMinX()), \r
-                                       (float) PageDesc.toPoints(pageArea.getMinY()), \r
-                                       (float) PageDesc.toPoints(pageArea.getWidth()), \r
-                                       (float) PageDesc.toPoints(pageArea.getHeight()) );\r
-\r
-                       java.awt.Rectangle r2 = g2d.getClipBounds();\r
-                       java.awt.Rectangle r = g2d.getClipBounds();\r
-                       r.width *= 2;\r
-                       r.height *= 2;\r
-                       g2d.scale(0.5, 0.5);\r
-//                     r = g2d.getClipBounds();\r
-//                     System.out.println(r);\r
-                       g2d.setClip(r);\r
-                       try {\r
-                               trend.setSize(r.width, r.height);\r
-//                             trend.setSize(contentArea2.getWidth()*2, contentArea2.getHeight()*2);\r
-//                             g2d.setClip( contentArea2 );\r
-                               //trend.setSize(contentArea2.getWidth(), contentArea2.getHeight());\r
-                               if ( autoscale ) trend.zoomOut();\r
-                               trend.layout();\r
-                               trend.render( g2d );\r
-                       } finally {\r
-                               g2d.scale(2, 2);\r
-                               g2d.setClip(r2);\r
-                       }\r
-               }\r
-       }\r
-       \r
-}\r
+/*******************************************************************************
+' * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.trend.util;
+
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.simantics.g2d.canvas.impl.CanvasContext;
+import org.simantics.history.HistoryManager;
+import org.simantics.trend.TrendInitializer;
+import org.simantics.trend.configuration.TrendSpec;
+import org.simantics.trend.configuration.Viewport;
+import org.simantics.trend.impl.MilestoneSpec;
+import org.simantics.trend.impl.TrendNode;
+import org.simantics.utils.page.MarginUtils;
+import org.simantics.utils.page.PageDesc;
+import org.simantics.utils.page.PageOrientation;
+import org.simantics.utils.threads.AWTThread;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.FontFactory;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.DefaultFontMapper;
+import com.lowagie.text.pdf.FontMapper;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfWriter;
+
+public class PrintUtil {
+
+       PageDesc pageDesc;
+    FontMapper mapper;
+    List<PrintPage> pages = new ArrayList<PrintPage>();
+       
+    public PrintUtil()
+    {
+       pageDesc = new PageDesc("A4", PageOrientation.Landscape, 210, 297).withMargins( MarginUtils.MARGINS_10mm );
+        mapper = new DefaultFontMapper();
+        FontFactory.registerDirectories();
+    }
+    
+    public void addTrendPage(TrendSpec trendSpec, HistoryManager historian, MilestoneSpec milestones, Viewport viewport)
+    {
+       pages.add( TrendPage.addTrendPage(trendSpec, historian, milestones, viewport) );
+    }
+    
+    public void addTrendPage(TrendNode srcTrend) {
+       pages.add( TrendPage.createFrom(srcTrend));
+    }
+    
+       public void setPageDesc(PageDesc pageDesc)
+       {
+               this.pageDesc = pageDesc;
+    }
+       
+       public void print() throws PrinterException {
+               PrinterJob printJob = PrinterJob.getPrinterJob();
+               printJob.setPrintable( new Printable() {
+                       @Override
+                       public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
+                               if (graphics instanceof Graphics2D == false) {
+                                       throw new PrinterException("Printer context does not support Graphics2D");
+                               }
+                               if (pageIndex < pages.size()) {
+                                       Graphics2D g2d = (Graphics2D) graphics;
+
+                                       g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());                  
+                                       
+                                       Rectangle2D rect = new Rectangle2D.Double(0, 0, pageFormat.getImageableWidth(), pageFormat.getImageableHeight());
+                                       //g2d.setClip( rect );
+                                       System.out.println("Printing page "+pageIndex+", pageFormat="+pageFormat.getImageableX()+", "+pageFormat.getImageableY()+", "+pageFormat.getImageableWidth()+", "+pageFormat.getImageableHeight());
+                                       PrintPage trend = pages.get(pageIndex);
+                                       trend.print(g2d, rect);
+                                       
+                                       return PAGE_EXISTS;
+                               }
+                               return NO_SUCH_PAGE;
+                       }} );
+               printJob.printDialog();
+               printJob.print();
+       }       
+       
+       public void printPdf(File file) throws IOException
+       {               
+               Document document = null;
+               FileOutputStream fos = null;
+               Graphics2D g2 = null;
+               try {
+                       // Page area
+                       Rectangle2D.Float pageArea = new Rectangle2D.Float();
+                       pageDesc.getPageRectangle( pageArea );
+
+                       // Content area in page
+                       Rectangle2D.Float contentArea = new Rectangle2D.Float();
+                       pageDesc.getMarginsRectangle( contentArea );
+       
+                       // step 1: creation of a document-object
+                       Rectangle pageArea2 = new Rectangle( 
+                                       (float) PageDesc.toPoints(pageArea.getMinX()), 
+                                       (float) PageDesc.toPoints(pageArea.getMinY()), 
+                                       (float) PageDesc.toPoints(pageArea.getWidth()), 
+                                       (float) PageDesc.toPoints(pageArea.getHeight()) );
+                       document = new Document( pageArea2 );
+          
+                       // step 2: creation of the writer
+                       if ( !file.exists() ) file.createNewFile();
+                       fos = new FileOutputStream( file, false );
+                       PdfWriter writer;
+                       try {
+                               writer = PdfWriter.getInstance(document, fos);
+                       } catch (DocumentException e) {
+                               throw new IOException(e);
+                       }
+            
+                       // step 3: we open the document
+                       document.open();
+
+                       // step 4:
+                       for ( PrintPage page : pages ) 
+                       {
+                               if (!document.newPage()) break;
+                               PdfContentByte cb = writer.getDirectContent();
+                               g2 = cb.createGraphics( pageArea2.getWidth(), pageArea2.getHeight(), mapper);
+                               
+                               Rectangle2D contentArea2 = new Rectangle2D.Float( 
+                                               (float) PageDesc.toPoints(contentArea.getMinX()), 
+                                               (float) PageDesc.toPoints(contentArea.getMinY()), 
+                                               (float) PageDesc.toPoints(contentArea.getWidth()), 
+                                               (float) PageDesc.toPoints(contentArea.getHeight()) );
+       
+                               page.print(g2, contentArea2);
+                       }
+                       
+        } finally {
+               try {
+                       if (g2 != null) g2.dispose();
+                       if (document != null) document.close();
+                       if (fos != null) fos.close();
+               } catch (Exception e) {}
+        }
+       }
+
+       interface PrintPage {
+               void print(Graphics2D g2d, Rectangle2D pageArea);
+       }
+       
+       static class TrendPage implements PrintPage
+       {
+               boolean autoscale;
+               TrendNode trend;
+               
+               public static TrendPage createFrom(TrendNode srcTrend)
+               {
+               TrendPage page = new TrendPage();
+               CanvasContext ctx = TrendInitializer.createDefaultCanvas(AWTThread.getThreadAccess(), srcTrend.historian, srcTrend.collector, null, srcTrend.getTrendSpec());
+               TrendNode trend = TrendInitializer.getTrendNode( ctx );        
+               trend.setViewport( srcTrend.getViewport() );
+               page.autoscale = false;
+               if (srcTrend.milestones != null) trend.setMilestones( srcTrend.milestones );
+               trend.printing = true;
+               page.trend = trend;
+               return page;
+               }
+               
+           public static TrendPage addTrendPage(TrendSpec trendSpec, HistoryManager historian, MilestoneSpec milestones, Viewport viewport)
+           {
+               TrendPage page = new TrendPage();
+               CanvasContext ctx = TrendInitializer.createDefaultCanvas(AWTThread.getThreadAccess(), historian, null, null, trendSpec);
+               TrendNode trend = TrendInitializer.getTrendNode( ctx );         
+               trend.printing = true;
+               if (milestones!=null) {
+                       trend.setMilestones(milestones);
+               }
+               if ( viewport!=null ) {
+                       trend.setViewport(viewport);
+                       page.autoscale = false;
+               } else {
+                       page.autoscale = true;
+               }
+               page.trend = trend;
+               return page;
+           }
+                               
+               public void print(Graphics2D g2d, Rectangle2D pageArea)
+               {
+                       Rectangle2D contentArea2 = new Rectangle2D.Float( 
+                                       (float) PageDesc.toPoints(pageArea.getMinX()), 
+                                       (float) PageDesc.toPoints(pageArea.getMinY()), 
+                                       (float) PageDesc.toPoints(pageArea.getWidth()), 
+                                       (float) PageDesc.toPoints(pageArea.getHeight()) );
+
+                       java.awt.Rectangle r2 = g2d.getClipBounds();
+                       java.awt.Rectangle r = g2d.getClipBounds();
+                       r.width *= 2;
+                       r.height *= 2;
+                       g2d.scale(0.5, 0.5);
+//                     r = g2d.getClipBounds();
+//                     System.out.println(r);
+                       g2d.setClip(r);
+                       try {
+                               trend.setSize(r.width, r.height);
+//                             trend.setSize(contentArea2.getWidth()*2, contentArea2.getHeight()*2);
+//                             g2d.setClip( contentArea2 );
+                               //trend.setSize(contentArea2.getWidth(), contentArea2.getHeight());
+                               if ( autoscale ) trend.zoomOut();
+                               trend.layout();
+                               trend.render( g2d );
+                       } finally {
+                               g2d.scale(2, 2);
+                               g2d.setClip(r2);
+                       }
+               }
+       }
+       
+}