Changeset 907
- Timestamp:
- 08/08/08 09:25:04 (4 months ago)
- Files:
-
- sandbox/camptocamp/MapFishUnhcr/client/mfbase/mapfish/core/PrintProtocol.js (modified) (6 diffs)
- sandbox/camptocamp/MapFishUnhcr/client/mfbase/mapfish/tests/core/test_PrintProtocol.html (modified) (3 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/pom.xml (modified) (1 diff)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/ShellMapPrinter.java (modified) (2 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/Transformer.java (modified) (1 diff)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/MapChunkDrawer.java (modified) (1 diff)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/HTTPMapReader.java (modified) (5 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/MapReader.java (modified) (1 diff)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/MapServerMapReader.java (modified) (5 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/TileCacheLayerInfo.java (added)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/TileCacheMapReader.java (added)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/TileableMapReader.java (added)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/WMSMapReader.java (modified) (6 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/WMSServerInfo.java (added)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/BitmapMapRenderer.java (modified) (2 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/MapRenderer.java (modified) (2 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/PDFMapRenderer.java (modified) (3 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/SVGMapRenderer.java (modified) (4 diffs)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/test/java/org/mapfish/print/map (added)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/test/java/org/mapfish/print/map/readers (added)
- sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/test/java/org/mapfish/print/map/readers/WMSServerInfoTest.java (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
sandbox/camptocamp/MapFishUnhcr/client/mfbase/mapfish/core/PrintProtocol.js
r884 r907 198 198 var layerOverrides = OpenLayers.Util.extend({}, overrides[olLayer.name]); 199 199 200 //allows to have some attributes averriden in fct of the resolution200 //allows to have some attributes overriden in fct of the resolution 201 201 OpenLayers.Util.extend(layerOverrides, layerOverrides[dpi]); 202 202 … … 247 247 248 248 /** 249 * Method: convertLayer 250 * 251 * Handles the common parameters of all supported layer types. 252 * 253 * Parameters: 254 * olLayer - {OpenLayers.Layer} The OL layer. 255 * 256 * Returns: 257 * {Object} The config for this layer 258 */ 259 convertLayer: function(olLayer) { 260 var url = olLayer.url; 261 if (url instanceof Array) { 262 url = url[0]; 263 } 264 return { 265 baseURL: url, 266 opacity: (olLayer.opacity != null) ? olLayer.opacity : 1.0, 267 singleTile: olLayer.singleTile, 268 customParams: {} 269 }; 270 }, 271 272 /** 249 273 * Method: convertWMSLayer 250 274 * 251 275 * Builds the layer configuration from an {OpenLayers.Layer.WMS} layer. 252 276 * The structure expected from the print module is: 253 * <pre>277 * (start code) 254 278 * { 255 279 * type: 'WMS' … … 258 282 * styles: [{String}] 259 283 * format: {String} 284 * opacity: {Float} 285 * singleTile: {boolean} 260 286 * customParams: { 261 287 * {String}: {String} 262 288 * } 263 289 * } 264 * </pre>290 * (end) 265 291 * 266 292 * Parameters: … … 268 294 * 269 295 * Returns: 270 * {Object} The config for this layer296 * {Object} The config for this layer 271 297 */ 272 298 convertWMSLayer: function(olLayer) { 273 var url = olLayer.url; 274 if (url instanceof Array) { 275 url = url[0]; 276 } 277 var layer = { 299 var layer = OpenLayers.Util.extend(this.convertLayer(olLayer), 300 { 278 301 type: 'WMS', 279 302 layers: this.fixArray(olLayer.params.LAYERS), 280 baseURL: url,281 303 format: olLayer.params.FORMAT || olLayer.DEFAULT_PARAMS.format, 282 304 styles: this.fixArray(olLayer.params.STYLES || 283 olLayer.DEFAULT_PARAMS.styles), 284 opacity: (olLayer.opacity != null) ? olLayer.opacity : 1.0, 285 customParams: {} 286 }; 305 olLayer.DEFAULT_PARAMS.styles) 306 }); 287 307 for (var paramName in olLayer.params) { 288 308 var paramNameLow = paramName.toLowerCase(); … … 296 316 } 297 317 return layer; 318 }, 319 320 /** 321 * Method: convertTileCacheLayer 322 * 323 * Builds the layer configuration from an {OpenLayers.Layer.TileCache} layer. 324 * The structure expected from the print module is: 325 * (start code) 326 * { 327 * type: 'TileCache' 328 * baseURL: {String} 329 * layer: {String} 330 * opacity: {Float} 331 * maxExtent: [minx, miny] 332 * tileSize: [width, height] 333 * extension: {String} 334 * resolutions: [{Float}] 335 * } 336 * (end) 337 * 338 * Parameters: 339 * olLayer - {OpenLayers.Layer.TileCache} The OL layer. 340 * 341 * Returns: 342 * {Object} The config for this layer 343 */ 344 convertTileCacheLayer: function(olLayer) { 345 return OpenLayers.Util.extend(this.convertLayer(), { 346 type: 'TileCache', 347 layer: olLayer.layername, 348 maxExtent: olLayer.maxExtent.toArray(), 349 tileSize: [olLayer.tileSize.w, olLayer.tileSize.h], 350 extension: olLayer.extension, 351 resolutions: olLayer.resolutions 352 }); 298 353 }, 299 354 … … 400 455 'OpenLayers.Layer': mapfish.PrintProtocol.IGNORED, 401 456 'OpenLayers.Layer.WMS': mapfish.PrintProtocol.prototype.convertWMSLayer, 402 'OpenLayers.Layer.WMS.Untiled': mapfish.PrintProtocol.prototype.convertWMSLayer 457 'OpenLayers.Layer.WMS.Untiled': mapfish.PrintProtocol.prototype.convertWMSLayer, 458 'OpenLayers.Layer.TileCache': mapfish.PrintProtocol.prototype.convertTileCacheLayer 403 459 }; sandbox/camptocamp/MapFishUnhcr/client/mfbase/mapfish/tests/core/test_PrintProtocol.html
r716 r907 35 35 "layers":[ 36 36 { 37 "baseURL":"http://labs.metacarta.com/wms/vmap0", 38 "opacity": 1, 39 "singleTile": false, 40 customParams: {FOO: 'bar'}, 37 41 "type":"WMS", 38 42 "layers":["basic", "toto"], 39 "baseURL":"http://labs.metacarta.com/wms/vmap0",40 43 "format":wms.DEFAULT_PARAMS.format, 41 styles: ['s1', 's2'], 42 "opacity": 1, 43 customParams: {FOO: 'bar'} 44 styles: ['s1', 's2'] 44 45 } 45 46 ] … … 85 86 "layers":[ 86 87 { 88 "baseURL":"http://labs.metacarta.com/wms/vmap0", 89 "opacity": 1, 90 "singleTile": false, 91 "customParams":{}, 87 92 "type":"WMS", 88 93 "layers":["basic", "toto"], 89 "baseURL":"http://labs.metacarta.com/wms/vmap0",90 94 "format":wms.DEFAULT_PARAMS.format, 91 "styles":[], 92 "opacity": 1, 93 "customParams":{} 95 "styles":[] 94 96 } 95 97 ] … … 104 106 print = new mapfish.PrintProtocol(map, "/print.pdf", {}, 100); 105 107 expected.layers.push({ 108 "baseURL":"http://labs.metacarta.com/wms/vmap0", 109 "opacity": 1, 110 "singleTile": false, 111 "customParams":{ 112 FOO:'bar' //I don't know why, but OL makes the name uppercase 113 }, 106 114 "type":"WMS", 107 115 "layers":["tutu", "titi"], 108 "baseURL":"http://labs.metacarta.com/wms/vmap0",109 116 "format":"image/png", 110 "styles":[], 111 "opacity": 1, 112 "customParams":{ 113 FOO:'bar' //I don't know why, but OL makes the name uppercase 114 } 117 "styles":[] 115 118 }); 116 119 t.eq(json.write(print.spec), json.write(expected), "Results with two layers (two visible)"); sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/pom.xml
r894 r907 86 86 <version>1.2.14</version> 87 87 </dependency> 88 <dependency> 89 <groupId>com.vividsolutions</groupId> 90 <artifactId>jts</artifactId> 91 <version>1.8</version> 92 </dependency> 88 93 </dependencies> 89 94 <repositories> sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/ShellMapPrinter.java
r894 r907 38 38 private String spec = null; 39 39 40 @Option(desc = "Used only if log4jConfig is not specified. 2 if you want the debug information (stacktraces are shown), 1 for infos and 0 for only warnings and errors")40 @Option(desc = "Used only if log4jConfig is not specified. 3 if you want everything, 2 if you want the debug information (stacktraces are shown), 1 for infos and 0 for only warnings and errors") 41 41 private int verbose = 1; 42 42 … … 112 112 level = Level.INFO; 113 113 break; 114 case 2: 115 level = Level.DEBUG; 116 break; 114 117 default: 115 level = Level. DEBUG;118 level = Level.TRACE; 116 119 break; 117 120 } sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/Transformer.java
r896 r907 201 201 } 202 202 203 public AffineTransform getBitmapTransform() { 204 return getPdfTransform(); 205 } 206 203 207 public int getScale() { 204 208 return scale; sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/MapChunkDrawer.java
r896 r907 94 94 95 95 //do the rendering 96 for (int i = 0; i < readers.size(); i++) { 97 MapReader reader = readers.get(i); 98 reader.render(transformer, dc, srs, i == 0); 96 dc.saveState(); 97 try { 98 transformer.setClipping(dc); 99 for (int i = 0; i < readers.size(); i++) { 100 MapReader reader = readers.get(i); 101 reader.render(transformer, dc, srs, i == 0); 102 } 103 } finally { 104 dc.restoreState(); 99 105 } 106 100 107 101 108 if (mainTransformer != null) { sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/HTTPMapReader.java
r896 r907 11 11 import org.pvalsecc.misc.URIUtils; 12 12 13 import java.io.IOException; 13 14 import java.net.URI; 15 import java.net.URISyntaxException; 14 16 import java.util.HashMap; 15 17 import java.util.Iterator; … … 21 23 public static final Logger LOGGER = Logger.getLogger(HTTPMapReader.class); 22 24 23 pr ivatefinal RenderingContext context;25 protected final RenderingContext context; 24 26 protected final PJsonObject params; 25 27 protected final URI baseUrl; … … 62 64 } 63 65 64 MapRenderer .Format format = addQueryParams(queryParams, transformer, srs, first);66 MapRenderer formater = MapRenderer.get(getFormat()); 65 67 66 final URI url = URIUtils.addParams(baseUrl, queryParams, OVERRIDE_ALL);67 LOGGER.debug(url);68 addCommonQueryParams(queryParams, transformer, srs, first); 69 final URI commonUri = URIUtils.addParams(baseUrl, queryParams, OVERRIDE_ALL); 68 70 69 MapRenderer formater = MapRenderer.get(format); 70 71 formater.render(transformer, url, dc, context, opacity); 71 renderTiles(formater, transformer, commonUri, dc); 72 72 } catch (Exception e) { 73 73 context.addError(e); … … 75 75 } 76 76 77 protected abstract MapRenderer.Format addQueryParams(Map<String, List<String>> result, Transformer transformer, String srs, boolean first); 77 protected abstract void renderTiles(MapRenderer formater, Transformer transformer, URI commonUri, PdfContentByte dc) throws IOException, URISyntaxException; 78 79 protected abstract MapRenderer.Format getFormat(); 80 81 /** 82 * Adds the query parameters common to every tile 83 */ 84 protected abstract void addCommonQueryParams(Map<String, List<String>> result, Transformer transformer, String srs, boolean first); 78 85 79 86 public boolean canMerge(MapReader other) { … … 82 89 } 83 90 84 if (other instanceof WMSMapReader) {85 WMSMapReader wms = (WMSMapReader) other;91 if (other instanceof HTTPMapReader) { 92 HTTPMapReader http = (HTTPMapReader) other; 86 93 PJsonObject customParams = params.optJSONObject("customParams"); 87 PJsonObject customParamsOther = wms.params.optJSONObject("customParams");88 return baseUrl.equals( wms.baseUrl) &&94 PJsonObject customParamsOther = http.params.optJSONObject("customParams"); 95 return baseUrl.equals(http.baseUrl) && 89 96 (customParams != null ? customParams.equals(customParamsOther) : customParamsOther == null); 90 97 } else { sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/MapReader.java
r883 r907 23 23 } else if ("MapServer".equalsIgnoreCase(type)) { 24 24 MapServerMapReader.create(target, context, params); 25 } else if ("TileCache".equalsIgnoreCase(type)) { 26 TileCacheMapReader.create(target, context, params); 25 27 } else { 26 28 throw new InvalidJsonValueException(params, "type", type); sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/MapServerMapReader.java
r896 r907 1 1 package org.mapfish.print.map.readers; 2 2 3 import com.lowagie.text.pdf.PdfContentByte; 3 4 import org.mapfish.print.RenderingContext; 4 5 import org.mapfish.print.Transformer; … … 9 10 import org.pvalsecc.misc.URIUtils; 10 11 12 import java.io.IOException; 13 import java.net.URI; 11 14 import java.util.ArrayList; 12 15 import java.util.List; … … 24 27 } 25 28 26 protected MapRenderer.Format addQueryParams(Map<String, List<String>> result, Transformer transformer, String srs, boolean first) { 27 final MapRenderer.Format type; 29 protected void renderTiles(MapRenderer formater, Transformer transformer, URI commonUri, PdfContentByte dc) throws IOException { 30 //tiling not supported for MapServer protocol... 31 List<URI> uris = new ArrayList<URI>(1); 32 uris.add(commonUri); 33 formater.render(transformer, uris, dc, context, opacity, 1, 0, 0, 34 transformer.getRotatedBitmapW(), transformer.getRotatedBitmapH()); 35 } 36 37 protected MapRenderer.Format getFormat() { 38 if (format.equals("image/svg+xml")) { 39 return MapRenderer.Format.SVG; 40 } else if (format.equals("application/x-pdf")) { 41 return MapRenderer.Format.PDF; 42 } else { 43 return MapRenderer.Format.BITMAP; 44 } 45 } 46 47 protected void addCommonQueryParams(Map<String, List<String>> result, Transformer transformer, String srs, boolean first) { 28 48 final long w; 29 49 final long h; … … 32 52 w = transformer.getRotatedSvgW(); 33 53 h = transformer.getRotatedSvgH(); 34 type = MapRenderer.Format.SVG;35 54 } else if (format.equals("application/x-pdf")) { 36 55 URIUtils.addParamOverride(result, "MAP_IMAGETYPE", "pdf"); 37 56 w = transformer.getRotatedBitmapW(); 38 57 h = transformer.getRotatedBitmapH(); 39 type = MapRenderer.Format.PDF;40 41 58 } else { 42 59 URIUtils.addParamOverride(result, "MAP_IMAGETYPE", "png"); 43 60 w = transformer.getRotatedBitmapW(); 44 61 h = transformer.getRotatedBitmapH(); 45 type = MapRenderer.Format.BITMAP;46 62 } 47 63 URIUtils.addParamOverride(result, "MODE", "map"); … … 53 69 URIUtils.addParamOverride(result, "TRANSPARENT", "true"); 54 70 } 55 return type;56 71 } 57 72 sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/readers/WMSMapReader.java
r896 r907 9 9 import org.pvalsecc.misc.URIUtils; 10 10 11 import java.io.UnsupportedEncodingException; 12 import java.net.URI; 13 import java.net.URISyntaxException; 11 14 import java.util.ArrayList; 15 import java.util.HashMap; 12 16 import java.util.List; 13 17 import java.util.Map; 14 18 15 public class WMSMapReader extends HTTPMapReader { 19 /** 20 * Support for the WMS protocol with possibilities to go through a WMS-C service 21 * (TileCache). 22 */ 23 public class WMSMapReader extends TileableMapReader { 16 24 private final List<String> layers = new ArrayList<String>(); 17 25 … … 22 30 private WMSMapReader(String layer, String style, RenderingContext context, PJsonObject params) { 23 31 super(context, params); 32 tileCacheLayerInfo = WMSServerInfo.getInfo(baseUrl).getTileCacheLayer(layer); 24 33 layers.add(layer); 25 34 styles.add(style); … … 27 36 } 28 37 29 protected MapRenderer.Format addQueryParams(Map<String, List<String>> result, Transformer transformer, String srs, boolean first) { 38 protected MapRenderer.Format getFormat() { 39 if (format.equals("image/svg+xml")) { 40 return MapRenderer.Format.SVG; 41 } else if (format.equals("application/x-pdf")) { 42 return MapRenderer.Format.PDF; 43 } else { 44 return MapRenderer.Format.BITMAP; 45 } 46 } 47 48 protected void addCommonQueryParams(Map<String, List<String>> result, Transformer transformer, String srs, boolean first) { 30 49 URIUtils.addParamOverride(result, "FORMAT", format); 31 final MapRenderer.Format type;32 if (format.equals("image/svg+xml")) {33 URIUtils.addParamOverride(result, "WIDTH", Long.toString(transformer.getRotatedSvgW()));34 URIUtils.addParamOverride(result, "HEIGHT", Long.toString(transformer.getRotatedSvgH()));35 type = MapRenderer.Format.SVG;36 } else {37 URIUtils.addParamOverride(result, "WIDTH", Long.toString(transformer.getRotatedBitmapW()));38 URIUtils.addParamOverride(result, "HEIGHT", Long.toString(transformer.getRotatedBitmapH()));39 type = format.equals("application/x-pdf") ? MapRenderer.Format.PDF : MapRenderer.Format.BITMAP;40 }41 50 URIUtils.addParamOverride(result, "LAYERS", StringUtils.join(layers, ",")); 42 51 URIUtils.addParamOverride(result, "SRS", srs); … … 45 54 //URIUtils.addParamOverride(result, "EXCEPTIONS", "application/vnd.ogc.se_inimage"); 46 55 URIUtils.addParamOverride(result, "VERSION", "1.1.1"); 47 URIUtils.addParamOverride(result, "BBOX", String.format("%s,%s,%s,%s", transformer.getRotatedMinGeoX(), transformer.getRotatedMinGeoY(), transformer.getRotatedMaxGeoX(), transformer.getRotatedMaxGeoY()));48 56 if (!first) { 49 57 URIUtils.addParamOverride(result, "TRANSPARENT", "true"); 50 58 } 51 59 URIUtils.addParamOverride(result, "STYLES", StringUtils.join(styles, ",")); 52 return type;53 60 } 54 61 … … 82 89 } 83 90 91 if (tileCacheLayerInfo != null) { 92 //no layer merge when tilecache is here... 93 return false; 94 } 95 84 96 if (other instanceof WMSMapReader) { 85 97 WMSMapReader wms = (WMSMapReader) other; … … 89 101 } 90 102 } 103 104 protected URI getTileUri(URI commonUri, Transformer transformer, float minGeoX, float minGeoY, float maxGeoX, float maxGeoY, long w, long h) throws URISyntaxException, UnsupportedEncodingException { 105 106 Map<String, List<String>> tileParams = new HashMap<String, List<String>>(); 107 if (format.equals("image/svg+xml")) { 108 URIUtils.addParamOverride(tileParams, "WIDTH", Long.toString(transformer.getRotatedSvgW())); 109 URIUtils.addParamOverride(tileParams, "HEIGHT", Long.toString(transformer.getRotatedSvgH())); 110 } else { 111 URIUtils.addParamOverride(tileParams, "WIDTH", Long.toString(w)); 112 URIUtils.addParamOverride(tileParams, "HEIGHT", Long.toString(h)); 113 } 114 URIUtils.addParamOverride(tileParams, "BBOX", String.format("%s,%s,%s,%s", minGeoX, minGeoY, maxGeoX, maxGeoY)); 115 return URIUtils.addParams(commonUri, tileParams, OVERRIDE_ALL); 116 } 91 117 } sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/BitmapMapRenderer.java
r896 r907 4 4 import com.lowagie.text.Image; 5 5 import com.lowagie.text.pdf.PdfContentByte; 6 import com.vividsolutions.jts.geom.Coordinate; 7 import com.vividsolutions.jts.geom.GeometryFactory; 8 import com.vividsolutions.jts.geom.Polygon; 9 import org.apache.commons.logging.Log; 10 import org.apache.commons.logging.LogFactory; 6 11 import org.mapfish.print.RenderingContext; 7 12 import org.mapfish.print.Transformer; 8 13 14 import java.awt.geom.AffineTransform; 15 import java.awt.geom.Point2D; 9 16 import java.io.IOException; 10 17 import java.net.URI; 18 import java.util.List; 11 19 12 20 public class BitmapMapRenderer extends MapRenderer { 13 public void render(Transformer transformer, URI url, PdfContentByte dc, RenderingContext context, float opacity) throws IOException { 21 private static final Log LOGGER = LogFactory.getLog(BitmapMapRenderer.class); 22 23 public void render(Transformer transformer, List<URI> uris, PdfContentByte dc, RenderingContext context, float opacity, int nbTilesHorizontal, float offsetX, float offsetY, long bitmapTileW, long bitmapTileH) throws IOException { 14 24 dc.saveState(); 15 25 try { 16 final Image map = Image.getInstance(url.toURL()); 26 final AffineTransform bitmapTransformer = transformer.getBitmapTransform(); 27 dc.transform(bitmapTransformer); 28 final double rotation = transformer.getRotation(); 17 29 18 float rotation = (float) transformer.getRotation(); 19 final float h = transformer.getPaperH(); 20 final float w = transformer.getPaperW(); 21 final float x = transformer.getPaperPosX(); 22 final float y = transformer.getPaperPosY(); 23 if (rotation != 0.0) { 24 map.setRotation(rotation); 25 float dx = (float) Math.abs(h * Math.sin(rotation) * Math.cos(rotation)); 26 float dy = (float) Math.abs(w * Math.sin(rotation) * Math.cos(rotation)); 27 float rw = (float) (Math.abs(w * Math.cos(rotation)) + Math.abs(h * Math.sin(rotation))); 28 float rh = (float) (Math.abs(h * Math.cos(rotation)) + Math.abs(w * Math.sin(rotation))); 29 map.scaleAbsolute(rw, rh); 30 map.setAbsolutePosition(x - dx, y - dy); 31 transformer.setClipping(dc); 32 } else { 33 map.scaleAbsolute(w, h); 34 map.setAbsolutePosition(x, y); 30 Image smask = null; 31 if (opacity < 1.0) { 32 final byte byteOpacity = (byte) (Math.round(opacity * 256.0F)); 33 byte maskBytes[] = new byte[]{byteOpacity}; 34 smask = Image.getInstance(1, 1, 1, 8, maskBytes); 35 smask.makeMask(); 35 36 } 36 37 37 if (opacity < 1.0) { 38 final byte byteOpacity = (byte) (Math.round(opacity * 256.0F)); 39 byte gradient[] = new byte[]{byteOpacity}; 40 Image smask = Image.getInstance(1, 1, 1, 8, gradient); 41 smask.makeMask(); 42 map.setImageMask(smask); 38 for (int i = 0; i < uris.size(); i++) { 39 URI uri = uris.get(i); 40 41 final int line = i / nbTilesHorizontal; 42 final int col = i % nbTilesHorizontal; 43 final float posX = 0 - offsetX + col * bitmapTileW; 44 final float posY = 0 - offsetY + line * bitmapTileH; 45 46 if (rotation != 0.0 && !isTileVisible(posX, posY, bitmapTileW, bitmapTileH, bitmapTransformer, transformer)) { 47 if (LOGGER.isDebugEnabled()) { 48 LOGGER.debug("Not needed: " + uri); 49 } 50 continue; 51 } 52 53 LOGGER.debug(uri); 54 final Image map = Image.getInstance(uri.toURL()); 55 map.scaleAbsolute(bitmapTileW, bitmapTileH); 56 map.setAbsolutePosition(posX, posY); 57 58 if (smask != null) { 59 map.setImageMask(smask); 60 } 61 dc.addImage(map); 43 62 } 44 dc.addImage(map);45 63 } catch (DocumentException e) { 46 64 context.addError(e); … … 49 67 } 50 68 } 69 70 private boolean isTileVisible(float x, float y, long w, long h, AffineTransform bitmapTransformer, Transformer transformer) { 71 GeometryFactory gf = new GeometryFactory(); 72 Polygon page = gf.createPolygon( 73 gf.createLinearRing(new Coordinate[]{ 74 new Coordinate(transformer.getPaperPosX(), transformer.getPaperPosY()), 75 new Coordinate(transformer.getPaperPosX() + transformer.getPaperW(), transformer.getPaperPosY()), 76 new Coordinate(transformer.getPaperPosX() + transformer.getPaperW(), transformer.getPaperPosY() + transformer.getPaperH()), 77 new Coordinate(transformer.getPaperPosX(), transformer.getPaperPosY() + transformer.getPaperH()), 78 new Coordinate(transformer.getPaperPosX(), transformer.getPaperPosY()), 79 }), null); 80 81 Point2D.Float ll = new Point2D.Float(); 82 Point2D.Float lr = new Point2D.Float(); 83 Point2D.Float ur = new Point2D.Float(); 84 Point2D.Float ul = new Point2D.Float(); 85 bitmapTransformer.transform(new Point2D.Float(x, y), ll); 86 bitmapTransformer.transform(new Point2D.Float(x + w, y), lr); 87 bitmapTransformer.transform(new Point2D.Float(x + w, y + h), ur); 88 bitmapTransformer.transform(new Point2D.Float(x, y + h), ul); 89 Polygon tile = gf.createPolygon( 90 gf.createLinearRing(new Coordinate[]{ 91 new Coordinate(ll.getX(), ll.getY()), 92 new Coordinate(lr.getX(), lr.getY()), 93 new Coordinate(ur.getX(), ur.getY()), 94 new Coordinate(ul.getX(), ul.getY()), 95 new Coordinate(ll.getX(), ll.getY()), 96 }), null 97 ); 98 99 return page.intersects(tile); 100 } 51 101 } sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/MapRenderer.java
r706 r907 8 8 import java.net.URI; 9 9 import java.util.HashMap; 10 import java.util.List; 10 11 import java.util.Map; 11 12 … … 23 24 } 24 25 25 public abstract void render(Transformer transformer, URI url, PdfContentByte dc, RenderingContext context, float opacity) throws IOException;26 public abstract void render(Transformer transformer, List<URI> urls, PdfContentByte dc, RenderingContext context, float opacity, int nbTilesHorizontal, float offsetX, float offsetY, long bitmapTileW, long bitmapTileH) throws IOException; 26 27 27 28 public enum Format { sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/PDFMapRenderer.java
r896 r907 6 6 import com.lowagie.text.pdf.PdfReader; 7 7 import org.apache.log4j.Logger; 8 import org.mapfish.print.InvalidValueException; 8 9 import org.mapfish.print.RenderingContext; 9 10 import org.mapfish.print.Transformer; … … 11 12 import java.io.IOException; 12 13 import java.net.URI; 14 import java.util.List; 13 15 14 16 public class PDFMapRenderer extends MapRenderer { 15 17 public static final Logger LOGGER = Logger.getLogger(PDFMapRenderer.class); 16 18 17 public void render(Transformer transformer, URI url, PdfContentByte dc, RenderingContext context, float opacity) throws IOException { 18 PdfReader reader = new PdfReader(url.toURL()); 19 public void render(Transformer transformer, List<URI> uris, PdfContentByte dc, RenderingContext context, float opacity, int nbTilesHorizontal, float offsetX, float offsetY, long bitmapTileW, long bitmapTileH) throws IOException { 20 if (uris.size() != 1) { 21 //tiling not supported in PDF 22 throw new InvalidValueException("format", "application/x-pdf"); 23 } 24 final URI uri = uris.get(0); 25 LOGGER.debug(uri); 26 PdfReader reader = new PdfReader(uri.toURL()); 19 27 PdfImportedPage pdfMap = context.getWriter().getImportedPage(reader, 1); 20 28 … … 29 37 dc.saveState(); 30 38 try { 31 transformer.setClipping(dc);32 39 dc.transform(transformer.getPdfTransform()); 33 40 dc.addTemplate(pdfMap, 0, 0); sandbox/camptocamp/MapFishUnhcr/server/java/print/print-lib/src/main/java/org/mapfish/print/map/renderers/SVGMapRenderer.java
r896 r907 10 10 import org.apache.xml.serialize.OutputFormat; 11 11 import org.apache.xml.serialize.XMLSerializer; 12 import org.mapfish.print.InvalidValueException; 12 13 import org.mapfish.print.RenderingContext; 13 14 import org.mapfish.print.Transformer; … … 54 55 } 55 56 56 public void render(Transformer transformer, URI url, PdfContentByte dc, RenderingContext context, float opacity) throws IOException { 57 public void render(Transformer transformer, java.util.List<URI> uris, PdfContentByte dc, RenderingContext context, float opacity, int nbTilesHorizontal, float offsetX, float offsetY, long bitmapTileW, long bitmapTileH) throws IOException { 58 if (uris.size() != 1) { 59 //tiling not supported in SVG 60 throw new InvalidValueException("format", "application/x-pdf"); 61 } 62 57 63 dc.saveState(); 58 64 try { 59 transformer.setClipping(dc);60 65 dc.transform(transformer.getSvgTransform()); 61 66 … … 75 80 g2.setRenderingHint(RenderingHintsKeyExt.KEY_AVOID_TILE_PAINTING, RenderingHintsKeyExt.VALUE_AVOID_TILE_PAINTING_ON); 76 81 77 final TranscoderInput ti = getTranscoderInput(url.toURL(), transformer, context); 82 final URI uri = uris.get(0); 83 LOGGER.debug(uri); 84 final TranscoderInput ti = getTranscoderInput(uri.toURL(), transformer, context); 78 85 if (ti != null) { 79 86 PrintTranscoder pt = new PrintTranscoder(); … … 137 144 serializer.serialize(doc); 138 145 139 LOGGER. debug(out.toString());146 LOGGER.trace(out.toString()); 140 147 out.close(); 141 148 }