Revision: 6305
          http://sourceforge.net/p/jump-pilot/code/6305
Author:   ma15569
Date:     2020-06-08 12:02:16 +0000 (Mon, 08 Jun 2020)
Log Message:
-----------
Added a valid plugin to export the view in several file format (Raster, SVG, 
PDF) with some enhancement (resize view to save according to a scale).
This plugin substitute SaveViewAsRaster and SaveViewAsSVG plugins. 

Added Paths:
-----------
    plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewPlugIn.java
    plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewUtils.java

Added: 
plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewPlugIn.java
===================================================================
--- plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewPlugIn.java 
                        (rev 0)
+++ plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewPlugIn.java 
2020-06-08 12:02:16 UTC (rev 6305)
@@ -0,0 +1,429 @@
+package com.cadplan.jump;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+//import java.awt.Graphics2D;
+import java.awt.GridBagLayout;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+//import java.awt.geom.NoninvertibleTransformException;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JFileChooser;
+import javax.swing.JFormattedTextField;
+import javax.swing.JLabel;
+//import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.filechooser.FileFilter;
+
+import org.openjump.core.apitools.IOTools;
+import org.openjump.core.ui.plugin.file.LayerPrinter2;
+import org.openjump.core.ui.plugin.file.WorldFileWriter;
+import org.openjump.core.ui.util.ScreenScale;
+import org.saig.core.gui.swing.sldeditor.util.FormUtils;
+
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.task.TaskMonitor;
+import com.vividsolutions.jump.workbench.JUMPWorkbench;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.model.Layer;
+import com.vividsolutions.jump.workbench.model.Layerable;
+import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
+import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
+import com.vividsolutions.jump.workbench.plugin.PlugInContext;
+import com.vividsolutions.jump.workbench.plugin.ThreadedBasePlugIn;
+import com.vividsolutions.jump.workbench.ui.GUIUtil;
+import com.vividsolutions.jump.workbench.ui.LayerViewPanel;
+import com.vividsolutions.jump.workbench.ui.MenuNames;
+import com.vividsolutions.jump.workbench.ui.ValidatingTextField;
+import com.vividsolutions.jump.workbench.ui.Viewport;
+import com.vividsolutions.jump.workbench.ui.images.IconLoader;
+import com.vividsolutions.jump.workbench.ui.plugin.PersistentBlackboardPlugIn;
+
+/**
+ * Save the view to a PNG or a JPG image file.
+ * The exported image can have a size different from the original view.
+ */
+public class SaveViewPlugIn extends ThreadedBasePlugIn {
+       //ImageIO doesn't know about the "gif" format. I guess it's a copyright
+       // issue [Jon Aquino 11/6/2003]
+       //Don't use TYPE_INT_ARGB for jpegs -- they will turn pink [Jon Aquino
+       // 11/6/2003]
+       //ImageIO can probably write gif images from java 6, but we do we 
really 
+       // need that ? [mmichaud 2012-09-02]
+       //Extended capability to export to SVG and PDF and 
+       //to save images at defined scales. [Giuseppe Aruta 2020-06-07]
+
+       private List<MyFileFilter> myFileFilters;
+       //Arrays.asList(
+       /*              createFileFilter("PNG - Portable Network Graphics", 
"png",
+                                       BufferedImage.TYPE_INT_ARGB),
+                       createFileFilter("JPEG - Joint Photographic Experts 
Group", "jpg",
+                                       BufferedImage.TYPE_INT_RGB));*/
+
+
+       private JFileChooser fileChooser = null;
+       private WorkbenchContext workbenchContext;
+       private JCheckBox worldFileCheckBox = null;
+       private final ImageIcon icon = IconLoader.icon("Box.gif");
+       private Geometry fence = null;
+
+
+       private ButtonGroup buttonGroup = new ButtonGroup();
+       private JRadioButton perLength = new JRadioButton();
+       private JRadioButton perScale = new JRadioButton();
+       private JFormattedTextField scaleField;
+
+       static WorkbenchContext wContext = 
JUMPWorkbench.getInstance().getContext();
+
+       public Icon getIcon() {
+               return IconLoader.icon("Camera.gif");
+       }
+
+       private ValidatingTextField pixelSizeField = new 
ValidatingTextField("9999",5,
+                       new ValidatingTextField.Validator() {
+               @Override
+               public boolean isValid(String text) {
+                       if (text.length() == 0) {
+                               return true;
+                       }
+                       try {
+                               int i = Integer.parseInt(text);
+                               long maxMemory = 
Runtime.getRuntime().maxMemory();
+                               // max = 5000 px for 1 G
+                               // max = 10000 px for 4 G
+                               int maxSize = 5*(int)Math.sqrt(maxMemory/1000);
+                               return i <= maxSize;
+                       } catch (NumberFormatException e) {
+                               return false;
+                       }
+               }
+       });
+
+
+
+       @Override
+       public String getName() {
+               return I18N.get("ui.MenuNames.FILE.SAVEVIEW");
+       }
+
+       double oldHorizontalScale;
+
+
+       private JFileChooser getFileChooser() {
+               if (fileChooser == null) {
+                       fileChooser = new 
GUIUtil.FileChooserWithOverwritePrompting() {
+                               /**
+                                * 
+                                */
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               public File getSelectedFile() {
+                                       File file = super.getSelectedFile();
+                                       return file == null ? null : new 
File(addExtension(file.getPath(),
+                                                       ((MyFileFilter) 
getFileFilter()).getFormat()));
+                               }
+                       };
+                       fileChooser.setDialogTitle(getName());
+                       //Remove *.* [Jon Aquino 11/6/2003]
+                       GUIUtil.removeChoosableFileFilters(fileChooser);
+
+                       Map<String,MyFileFilter> formatToFileFilterMap = new 
HashMap<>();
+
+                       for (MyFileFilter fileFilter : myFileFilters) {
+                               fileChooser.addChoosableFileFilter(fileFilter);
+                               
formatToFileFilterMap.put(fileFilter.getFormat(), fileFilter);
+                       }
+                       String lastFilename = (String) 
PersistentBlackboardPlugIn
+                                       
.get(workbenchContext).get(LAST_FILENAME_KEY);
+                       if (lastFilename != null) {
+                               fileChooser.setSelectedFile(new 
File(lastFilename));
+                       }
+                       fileChooser.setFileFilter(formatToFileFilterMap.get(
+                                       
PersistentBlackboardPlugIn.get(workbenchContext)
+                                       .get(FORMAT_KEY, "png")));
+                       buttonGroup.add(perLength);
+                       buttonGroup.add(perScale);
+                       perScale.setSelected(true);
+                       pixelSizeField.setEnabled(false);
+                       
perLength.setText(I18N.get("ui.plugin.SaveImageAsPlugIn.width-in-pixels"));
+                       perScale.setText(I18N.get("ui.WorkbenchFrame.scale")+" 
1:");
+                       scaleField = new JFormattedTextField();
+                       Viewport port = 
wContext.getLayerViewPanel().getViewport();
+                       oldHorizontalScale = 
ScreenScale.getHorizontalMapScale(port);
+                       scaleField.setValue( Math.floor(oldHorizontalScale));
+                       Box box = new Box(BoxLayout.Y_AXIS);
+                       JPanel jPanelSize = new JPanel(new GridBagLayout());
+                       String size ="<html><font color=black size=3>"
+                                       + "<b>" + 
I18N.get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.dimension")+
 "</b></html>";
+                       
I18N.get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.dimension");
+                       FormUtils.addRowInGBL(jPanelSize, 0, 0, new 
JLabel(size),true,true);
+                       FormUtils.addRowInGBL(jPanelSize, 1, 0, 
perScale,scaleField );
+                       FormUtils.addRowInGBL(jPanelSize, 2, 0, 
perLength,pixelSizeField );
+                       JPanel jPanelWF   = new JPanel(new 
FlowLayout(FlowLayout.LEFT));
+                       worldFileCheckBox = new javax.swing.JCheckBox();
+                       
worldFileCheckBox.setText(I18N.get("ui.plugin.SaveImageAsPlugIn.write-world-file"));
+                       if (fence != null){
+                               JLabel fenceIcon = new JLabel(icon);
+                               FormUtils.addRowInGBL(jPanelSize, 3, 0, 
fenceIcon, true, true);
+                       }
+                       jPanelWF.add(worldFileCheckBox);
+                       box.add(jPanelSize);
+                       box.add(jPanelWF);
+                       box.add(Box.createRigidArea(new Dimension(5,180)));
+                       fileChooser.setAccessory(box);
+                       perScale.addItemListener(new ItemListener(){
+                               @Override
+                               public void itemStateChanged(ItemEvent e) {
+                                       if(e.getStateChange() == 
ItemEvent.SELECTED){
+                                               scaleField.setEnabled(true);
+                                               // textField.setText("Enabled");
+                                       }
+                                       else if(e.getStateChange() == 
ItemEvent.DESELECTED){
+                                               scaleField.setEnabled(false);
+                                               // 
textField.setText("Disabled");
+                                       }
+
+                                       box.validate();
+                                       box.repaint();
+                               }
+                       });
+                       perLength.addItemListener(new ItemListener(){
+                               @Override
+                               public void itemStateChanged(ItemEvent e) {
+                                       if(e.getStateChange() == 
ItemEvent.SELECTED){
+                                               pixelSizeField.setEnabled(true);
+                                               // textField.setText("Enabled");
+                                       }
+                                       else if(e.getStateChange() == 
ItemEvent.DESELECTED){
+                                               
pixelSizeField.setEnabled(false);
+                                               // 
textField.setText("Disabled");
+                                       }
+
+                                       box.validate();
+                                       box.repaint();
+                               }
+                       });
+               }
+               return fileChooser;
+       }
+
+       private int getSizeInPixel() {
+               String text="";
+               int pixelSize=0;
+               if(perLength.isSelected()) {
+                       text = pixelSizeField.getText();
+                       try {
+                               pixelSize = Integer.parseInt(text);
+                       } catch (NumberFormatException e) {
+                               pixelSize = 800;  //some reasonable default
+                       }       
+               }
+               else if(perScale.isSelected()) {
+                       int newScale = 
((Number)scaleField.getValue()).intValue();
+                       int screenScale =  (int) Math.floor(oldHorizontalScale);
+                       int viewPanelWidth = 
wContext.getLayerViewPanel().getWidth();
+
+                       try {
+                               pixelSize = 
(newScale/screenScale)*viewPanelWidth;
+                       } catch (NumberFormatException e) {
+                               pixelSize = 800;  //some reasonable default
+                       }  
+               }
+               return pixelSize;
+       }
+
+       private MyFileFilter createFileFilter(String description, String format,
+                       int bufferedmageType) {
+               return new MyFileFilter(description, format);
+       }
+
+
+       private static class MyFileFilter extends FileFilter {
+               private FileFilter fileFilter;
+               private String format;
+               MyFileFilter(String description, String format) {
+                       fileFilter = GUIUtil.createFileFilter(description,
+                                       new String[]{format});
+                       this.format = format;
+               }
+               @Override
+               public boolean accept(File f) {
+                       return fileFilter.accept(f);
+               }
+
+               @Override
+               public String getDescription() {
+                       return fileFilter.getDescription();
+               }
+
+               public String getFormat() {
+                       return format;
+               }
+       }
+
+       I18NPlug iPlug;
+       private static final String FORMAT_KEY = "FORMAT";
+       private static final String LAST_FILENAME_KEY = "LAST FILENAME";
+
+       @Override
+       public void initialize(PlugInContext context) throws Exception {
+               super.initialize(context);
+               iPlug = new 
I18NPlug("JumpPrinter","language.JumpPrinterPlugin");
+               SaveViewUtils.removeMenu(new String[] {
+                               MenuNames.FILE, MenuNames.FILE_SAVEVIEW });
+               context.getFeatureInstaller().addMainMenuPlugin(this, new 
String[] {
+                               MenuNames.FILE, MenuNames.FILE_SAVEVIEW },
+                               
iPlug.get("JumpPrinter.Setup.SaveImage"),false,getIcon(),
+                               
createEnableCheck(context.getWorkbenchContext()), 9);
+       }
+
+
+       boolean fenceFound;
+
+       protected BufferedImage image(LayerViewPanel layerViewPanel) {
+               //Don't use TYPE_INT_ARGB, which makes JPEGs pinkish 
(presumably because
+               //JPEGs don't support transparency [Jon Aquino 11/6/2003]
+               BufferedImage image = new 
BufferedImage(layerViewPanel.getWidth(),
+                               layerViewPanel.getHeight(), 
BufferedImage.TYPE_INT_RGB);
+               layerViewPanel.paintComponent(image.getGraphics());
+               return image;
+       }
+
+
+       @Override
+       public boolean execute(PlugInContext context) throws Exception {
+               this.workbenchContext = context.getWorkbenchContext();
+               myFileFilters = new ArrayList<MyFileFilter>();
+               myFileFilters.add(createFileFilter("PNG - Portable Network 
Graphics", "png",
+                               BufferedImage.TYPE_INT_ARGB));
+               myFileFilters.add(createFileFilter("JPEG - Joint Photographic 
Experts Group", "jpg",
+                               BufferedImage.TYPE_INT_RGB));
+               myFileFilters.add(createFileFilter("GeoTIFF - Tagged Image File 
Format", "tif",
+                               BufferedImage.TYPE_INT_ARGB));
+
+               myFileFilters.add(createFileFilter("SVG - Scalable Vector 
Graphics", "svg",
+                               BufferedImage.TYPE_INT_ARGB));  
+
+               myFileFilters.add(createFileFilter("PDF - Portable Document 
Format", "pdf",
+                               BufferedImage.TYPE_INT_ARGB));  
+               fence = context.getLayerViewPanel().getFence();
+               fenceFound = fence != null;
+               if (fenceFound){
+                       pixelSizeField.setText("800");
+               }
+               else {
+                       
pixelSizeField.setText(context.getLayerViewPanel().getWidth() + "");
+               }
+               if (JFileChooser.APPROVE_OPTION != getFileChooser()
+                               .showSaveDialog(context.getWorkbenchFrame())) {
+                       fileChooser = null; //rebuild next invocation
+                       return false;
+               }
+               return true;
+       }
+
+
+
+
+
+       @Override
+       public void run(TaskMonitor monitor, PlugInContext context) throws 
Exception {
+               monitor.allowCancellationRequests();
+               
monitor.report(I18N.get("ui.plugin.SaveDatasetAsPlugIn.saving"));
+               MyFileFilter fileFilter = (MyFileFilter) 
getFileChooser().getFileFilter();
+               BufferedImage image;
+               LayerViewPanel viewPanel = context.getLayerViewPanel();
+               Envelope envelope;
+               Envelope envelope2 = new Envelope();
+               if (!fenceFound && (getSizeInPixel() == 
context.getLayerViewPanel().getWidth())) {
+                       image = image(viewPanel);  
+                       envelope2 = workbenchContext.getLayerViewPanel()
+                                       
.getViewport().getEnvelopeInModelCoordinates();
+               }
+               else {
+                       LayerPrinter2 layerPrinter = new LayerPrinter2();
+                       if (fenceFound)
+                       {
+                               envelope = fence.getEnvelopeInternal(); 
+                               String fenceLayerName = 
I18N.get("model.FenceLayerFinder.fence");
+                               Layer fenceLayer = 
workbenchContext.getLayerableNamePanel()
+                                               
.getLayerManager().getLayer(fenceLayerName);
+                               fenceLayer.setVisible(false);
+                       }
+                       else {
+                               envelope = workbenchContext.getLayerViewPanel()
+                                               
.getViewport().getEnvelopeInModelCoordinates();
+                       }
+                       image = layerPrinter.print(context.getLayerManager()
+                                       .getLayerables(Layerable.class), 
envelope, getSizeInPixel());
+                       viewPanel = layerPrinter.getLayerViewPanel();
+                       envelope2 = new Envelope(envelope.getMinX(), 
envelope.getMaxX(), envelope.getMinY(), envelope.getMaxY());
+
+               }
+
+               String filename = 
addExtension(getFileChooser().getSelectedFile()
+                               .getPath(), fileFilter.getFormat());
+               File imageFile = new File(filename);
+
+
+               if (fileFilter.format.equals("tif")) {
+                       IOTools.saveGeoTIFF(image, envelope2, imageFile);
+               }
+               if (fileFilter.format.equals("pdf")) {
+
+                       SaveViewUtils.saveAsPDF(viewPanel, envelope2, 
getSizeInPixel(),imageFile);
+               } 
+               if (fileFilter.format.equals("svg")) {
+
+
+                       SaveViewUtils.saveAsSVG(viewPanel, envelope2, 
getSizeInPixel(),imageFile);
+               } else if (fileFilter.format.equals("png") 
||fileFilter.format.equals("jpg") ){
+
+                       SaveViewUtils.saveAsRaster(image, 
fileFilter.getFormat(), imageFile);}
+               PersistentBlackboardPlugIn.get(workbenchContext)
+               .put(FORMAT_KEY, fileFilter.getFormat());
+               PersistentBlackboardPlugIn.get(workbenchContext)
+               .put(LAST_FILENAME_KEY, filename);
+               if ((worldFileCheckBox != null) && 
(worldFileCheckBox.isSelected()))
+                       WorldFileWriter.writeWorldFile( imageFile,  viewPanel );
+               fileChooser = null; 
+               
workbenchContext.getWorkbench().getFrame().setStatusMessage(I18N.get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.file.saved"));
+
+
+       }
+
+       public static MultiEnableCheck createEnableCheck(WorkbenchContext 
workbenchContext) {
+               EnableCheckFactory checkFactory = new 
EnableCheckFactory(workbenchContext);
+               return new 
MultiEnableCheck().add(checkFactory.createTaskWindowMustBeActiveCheck()).add(checkFactory.createAtLeastNLayerablesMustExistCheck(1));
+       }
+
+
+       private String addExtension(String path, String extension) {
+               if (path.toUpperCase().endsWith(extension.toUpperCase())) {
+                       return path;
+               }
+               if (path.endsWith(".")) {
+                       return path + extension;
+               }
+               return path + "." + extension;
+       }
+
+
+
+}
\ No newline at end of file


Property changes on: 
plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewPlugIn.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: 
plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewUtils.java
===================================================================
--- plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewUtils.java  
                        (rev 0)
+++ plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewUtils.java  
2020-06-08 12:02:16 UTC (rev 6305)
@@ -0,0 +1,294 @@
+package com.cadplan.jump;
+
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.image.RenderedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JTextArea;
+import javax.swing.MenuElement;
+
+import org.apache.batik.dom.GenericDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+
+import com.lowagie.text.pdf.DefaultFontMapper;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfWriter;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.util.Assert;
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.feature.FeatureCollection;
+import com.vividsolutions.jump.workbench.JUMPWorkbench;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.model.Layer;
+import com.vividsolutions.jump.workbench.ui.LayerViewPanel;
+import com.vividsolutions.jump.workbench.ui.OKCancelDialog;
+import com.vividsolutions.jump.workbench.ui.Viewport;
+import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller;
+import com.vividsolutions.jump.workbench.ui.renderer.LayerRenderer;
+import com.vividsolutions.jump.workbench.ui.renderer.Renderer;
+import com.vividsolutions.jump.workbench.ui.renderer.RenderingManager;
+import com.vividsolutions.jump.workbench.ui.renderer.java2D.Java2DConverter;
+
+public class SaveViewUtils {
+
+
+       static WorkbenchContext wContext = 
JUMPWorkbench.getInstance().getContext();
+
+       public static  void saveAsPDF(LayerViewPanel lvp,Envelope envelope, int 
extentInPixels, File file) 
+                       throws NoninvertibleTransformException {
+
+               int extentInPixelsX;
+               int extentInPixelsY;
+               double width = envelope.getWidth();
+               double height = envelope.getHeight();
+               if (width > height)
+               {
+                       extentInPixelsX = extentInPixels;
+                       extentInPixelsY = (int)Math.round(height / width * 
extentInPixels);
+               }
+               else
+               {
+                       extentInPixelsY = extentInPixels;
+                       extentInPixelsX = (int)Math.round(width / height * 
extentInPixels);
+               }
+               lvp.setSize(extentInPixelsX, extentInPixelsY);
+               lvp.getViewport().zoom(envelope);
+
+               double xoffset = 50.0; //pageFormat.getImageableX();
+               double yoffset = 50.0; //pageFormat.getImageableY();
+               double xsize = 2*xoffset + lvp.getWidth();//imageSize.width;
+               double ysize = 2*yoffset + lvp.getHeight();
+               try
+               {
+                       com.lowagie.text.Rectangle pageSize = new 
com.lowagie.text.Rectangle((float)xsize, (float)ysize);
+                       //System.out.println("xoffset="+xoffset+ "  
yoffset="+yoffset+"  xsize="+xsize+"  ysize="+ysize);
+                       com.lowagie.text.Document document = new 
com.lowagie.text.Document(pageSize);
+                       document.addCreator("OpenJUMP Print PDF");
+                       document.addTitle(file.getName());
+                       document.addAuthor("Giuseppe Aruta 
giuseppe_ar...@yahoo.it");
+                       document.addSubject("PDF file");
+                       //com.itextpdf.text.Rectangle pages = 
document.getPageSize();
+                       //System.out.println("Page size = "+pages);
+                       try
+                       {
+                               PdfWriter writer = 
PdfWriter.getInstance(document, new FileOutputStream(file.getAbsolutePath()));
+                               document.open();
+                               PdfContentByte cb = writer.getDirectContent();
+                               //PdfTemplate tp = 
cb.createTemplate((int)xsize,(int)ysize);
+                               DefaultFontMapper fontMapper = new 
DefaultFontMapper();
+                               
//fontMapper.insertDirectory("c:/windows/fonts");
+
+
+                               Graphics2D graphics2D = 
cb.createGraphics((int)xsize,(int)ysize, fontMapper);
+                               graphics2D.translate(xoffset,yoffset);
+                               lvp.paint(graphics2D);
+                               graphics2D.dispose();
+                       }
+                       catch(Exception ex)
+                       {
+                               System.out.println("ERROR creating pdf: "+ex);
+                               ex.printStackTrace();
+                       }
+                       document.close();
+               }
+               catch (Exception ex)
+               {
+                       System.out.println("ERROR: "+ex);
+                       JOptionPane.showMessageDialog(null,"To save images as 
PDF files, the iText library must be available","Error...",
+                                       JOptionPane.ERROR_MESSAGE);
+               }
+
+
+
+
+       }
+
+
+       public static  void saveAsSVG(LayerViewPanel lvp, Envelope envelope, 
int extentInPixels,
+                       File selFile) throws Exception {
+               int extentInPixelsX;
+               int extentInPixelsY;
+               double width = envelope.getWidth();
+               double height = envelope.getHeight();
+               if (width > height)
+               {
+                       extentInPixelsX = extentInPixels;
+                       extentInPixelsY = (int)Math.round(height / width * 
extentInPixels);
+               }
+               else
+               {
+                       extentInPixelsY = extentInPixels;
+                       extentInPixelsX = (int)Math.round(width / height * 
extentInPixels);
+               }
+               lvp.setSize(extentInPixelsX, extentInPixelsY);
+               lvp.getViewport().zoom(envelope);
+
+               // Get a DOMImplementation
+               DOMImplementation domImpl = GenericDOMImplementation
+                               .getDOMImplementation();
+
+               // Create an instance of org.w3c.dom.Document
+               Document document = domImpl.createDocument(null, "svg", null);
+
+               // Create an instance of the SVG Generator
+               SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
+               // This prevents the
+               // "null incompatible with text-specific antialiasing enable 
key" error
+               
svgGenerator.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
+                               RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
+               svgGenerator.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                               RenderingHints.VALUE_ANTIALIAS_DEFAULT);
+
+               //Set Size
+               svgGenerator.setSVGCanvasSize(lvp.getSize());
+
+               // --- Test with changed classes of Openjump and the new 
maxFeatures
+               // field in FeatureCollectionRenderer.class
+
+
+               RenderingManager rms = lvp.getRenderingManager();
+               List<Layer> layers = 
wContext.getLayerManager().getVisibleLayers(false);
+               //List<Layer> layers = 
context.getLayerManager().getVisibleLayers(false);
+               // Check if there are many features to draw and warn the user
+               int totalNumberOfFeatures = 0;
+               Envelope view = wContext.getLayerViewPanel().getViewport()
+                               .getEnvelopeInModelCoordinates();
+
+               //      Envelope view = 
context.getLayerViewPanel().getViewport()
+               //                      .getEnvelopeInModelCoordinates();
+
+               for (Layer layer : layers) {
+                       FeatureCollection fc = 
layer.getFeatureCollectionWrapper();
+                       totalNumberOfFeatures += fc.query(view).size();
+
+               }
+               if (totalNumberOfFeatures > 100000) {
+                       JTextArea labelArea = new JTextArea();
+                       labelArea.setEditable(false);
+                       labelArea.setOpaque(false);
+                       labelArea.setFont(new JLabel().getFont());
+                       labelArea
+                       .setText(I18N
+                                       
.get("org.openjump.core.ui.plugin.file.SaveImageAsSVGPlugIn.large-dataset-message"));
+                       OKCancelDialog dialog = new OKCancelDialog(
+                                       wContext.getWorkbench().getFrame(),
+                                       
I18N.get("org.openjump.core.ui.plugin.file.SaveImageAsSVGPlugIn.warning-message-title"),
+                                       true, labelArea, null);
+                       dialog.setVisible(true);
+                       if (!dialog.wasOKPressed())
+                               return;
+               }
+               for (Layer layer : layers) {
+                       Renderer myR = rms.getRenderer(layer);
+                       if (myR instanceof LayerRenderer) {
+                               LayerRenderer myRnew = (LayerRenderer) myR;
+                               myRnew.setMaxFeatures(10000000);
+                       }
+               }
+
+               // Change drawing resolution to print to svg (0.5 pixel to 0.1 
pixel)
+               Viewport viewport = lvp.getViewport();
+               Java2DConverter oldConverter = viewport.getJava2DConverter();
+               viewport.setJava2DConverter(new Java2DConverter(viewport, 
0.001));
+
+               //svgGenerator.scale(0.746, 0.746); // rapport pour LibreOffice 
(0.72/0.96)
+               svgGenerator.scale(0.90/0.96, 0.90/0.96); // rapport pour 
Inkscape
+               lvp.paintComponent(svgGenerator);
+
+               // Restore previous rendering resolution
+               lvp.getViewport().setJava2DConverter(oldConverter);
+               // ------------------------------
+               // reset the old state of 100 features
+               for (Layer layer : layers) {
+                       Renderer myR = rms.getRenderer(layer);
+                       if (myR instanceof LayerRenderer) {
+                               LayerRenderer myRnew = (LayerRenderer) myR;
+                               myRnew.setMaxFeatures(100);
+                       }
+               }
+               // ------------------------------
+
+               // Finally, stream out SVG to the your file
+               // Writer out = new FileWriter("MyMoMap.svg");
+               // FileWriter out = new FileWriter(selFile);
+               try {
+                       FileOutputStream fos = new FileOutputStream(selFile, 
false);
+                       OutputStreamWriter out = new OutputStreamWriter(fos, 
"UTF-8");
+                       svgGenerator.stream(out, true);
+                       out.close();
+               }
+               catch (Exception e) {
+                       wContext.getWorkbench().getFrame().handleThrowable(e);
+               }
+
+
+       }
+
+       public static void saveAsRaster(RenderedImage image, String format, 
File file)
+                       throws IOException {
+               boolean writerFound = ImageIO.write(image, format, file);
+               Assert.isTrue( writerFound, 
I18N.get("ui.plugin.SaveImageAsPlugIn.cannot-find-writer-for-image-format")+" '"
+                               + format + "'");
+       }
+
+
+
+       public static void removeMainMenuItem(String[] menuPath, String 
menuItemName) {
+
+               JMenu parentMenu = 
FeatureInstaller.getInstance().menuBarMenu(menuPath[0]);
+               if (menuPath.length > 1)
+                       for (int i = 1; i < menuPath.length; i++) {
+                               String menuPathName = menuPath[i];
+                               FeatureInstaller.getInstance();
+                               parentMenu = (JMenu)  
childMenuItem(menuPathName,  parentMenu);
+                       }  
+               JMenuItem item =   childMenuItem(menuItemName,  parentMenu);
+               if (item != null)
+                       parentMenu.remove(item); 
+               if (parentMenu.getPopupMenu() != null && (
+                               
parentMenu.getPopupMenu().getSubElements()).length == 0)
+                       parentMenu.getParent().remove(parentMenu); 
+       }
+
+
+       public static void removeMenu(String[] menuPath) {
+               JMenu parentMenu = 
FeatureInstaller.getInstance().menuBarMenu(menuPath[0]);
+               if (menuPath.length > 1)
+                       for (int i = 1; i < menuPath.length; i++) {
+                               String menuPathName = menuPath[i];
+                               parentMenu = (JMenu)  
childMenuItem(menuPathName,  parentMenu);
+                       }  
+               parentMenu.removeAll();
+               //parentMenu.getParent().remove(parentMenu);
+               //FeatureInstaller.getInstance().menuBar().remove(parentMenu);
+       }
+
+       // Copied from Kosmo FeatureInstaller.class
+
+       public static JMenuItem childMenuItem(String childName, MenuElement 
menu) {
+               if (menu instanceof JMenu)
+                       return childMenuItem(childName, 
((JMenu)menu).getPopupMenu()); 
+               MenuElement[] childMenuItems = menu.getSubElements();
+               for (int i = 0; i < childMenuItems.length; i++) {
+                       if (childMenuItems[i] instanceof JMenuItem && (
+                                       
(JMenuItem)childMenuItems[i]).getText().equals(childName))
+                               return (JMenuItem)childMenuItems[i]; 
+               } 
+               return null;
+       }
+
+
+}


Property changes on: 
plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/SaveViewUtils.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property


_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to