123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.render.bitmap;
-
- import java.awt.Color;
- import java.awt.image.BufferedImage;
- import java.util.EnumMap;
-
- import org.apache.fop.apps.FOPException;
- import org.apache.fop.apps.FOUserAgent;
- import org.apache.fop.configuration.Configuration;
- import org.apache.fop.fonts.DefaultFontConfig;
- import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
- import org.apache.fop.fonts.FontEventAdapter;
- import org.apache.fop.render.RendererConfig;
- import org.apache.fop.render.java2d.Java2DRendererConfig;
- import org.apache.fop.render.java2d.Java2DRendererConfig.Java2DRendererConfigParser;
- import org.apache.fop.util.ColorUtil;
-
- import static org.apache.fop.render.bitmap.BitmapRendererOption.ANTI_ALIASING;
- import static org.apache.fop.render.bitmap.BitmapRendererOption.BACKGROUND_COLOR;
- import static org.apache.fop.render.bitmap.BitmapRendererOption.COLOR_MODE;
- import static org.apache.fop.render.bitmap.BitmapRendererOption.JAVA2D_TRANSPARENT_PAGE_BACKGROUND;
- import static org.apache.fop.render.bitmap.BitmapRendererOption.RENDERING_QUALITY;
- import static org.apache.fop.render.bitmap.BitmapRendererOption.RENDERING_QUALITY_ELEMENT;
- import static org.apache.fop.render.bitmap.BitmapRendererOption.RENDERING_SPEED;
-
- /**
- * The Bitmap renderer config data object.
- */
- public class BitmapRendererConfig implements RendererConfig {
-
- private final EnumMap<BitmapRendererOption, Object> params
- = new EnumMap<BitmapRendererOption, Object>(BitmapRendererOption.class);
-
- private final DefaultFontConfig fontConfig;
-
- BitmapRendererConfig(DefaultFontConfig fontConfig) {
- this.fontConfig = fontConfig;
- }
-
- public DefaultFontConfig getFontInfoConfig() {
- return fontConfig;
- }
-
- public Color getBackgroundColor() {
- return (Color) get(BACKGROUND_COLOR);
- }
-
- public Boolean hasAntiAliasing() {
- return (Boolean) get(ANTI_ALIASING);
- }
-
- public Boolean isRenderHighQuality() {
- return (Boolean) get(RENDERING_QUALITY);
- }
-
- public Integer getColorMode() {
- return (Integer) get(COLOR_MODE);
- }
-
- public boolean hasTransparentBackround() {
- Object result = get(JAVA2D_TRANSPARENT_PAGE_BACKGROUND);
- return (Boolean) (result != null ? result
- : JAVA2D_TRANSPARENT_PAGE_BACKGROUND.getDefaultValue());
- }
-
- private Object get(BitmapRendererOption option) {
- return params.get(option);
- }
-
- /**
- * The parser for the Bitmap renderer configuration data.
- */
- public static class BitmapRendererConfigParser implements RendererConfigParser {
-
- private final String mimeType;
-
- public BitmapRendererConfigParser(String mimeType) {
- this.mimeType = mimeType;
- }
-
- private void setParam(BitmapRendererConfig config, BitmapRendererOption option,
- Object value) {
- config.params.put(option, value != null ? value : option.getDefaultValue());
- }
-
- void build(BitmapRendererConfig config, FOUserAgent userAgent,
- Configuration cfg) throws FOPException {
- if (cfg != null) {
- Java2DRendererConfig j2dConfig = new Java2DRendererConfigParser(null).build(
- userAgent, cfg);
- Boolean isTransparent = j2dConfig.isPageBackgroundTransparent();
- isTransparent = isTransparent == null
- ? (Boolean) JAVA2D_TRANSPARENT_PAGE_BACKGROUND.getDefaultValue()
- : isTransparent;
- setParam(config, JAVA2D_TRANSPARENT_PAGE_BACKGROUND, isTransparent);
-
- String background = getValue(cfg, BACKGROUND_COLOR);
- if (isTransparent) {
- // We don't use setParam here because we want to force a null value
- config.params.put(BACKGROUND_COLOR, null);
- } else {
- setParam(config, BACKGROUND_COLOR,
- ColorUtil.parseColorString(userAgent, background));
- }
-
- setParam(config, BitmapRendererOption.ANTI_ALIASING,
- getChild(cfg, ANTI_ALIASING).getValueAsBoolean(
- (Boolean) ANTI_ALIASING.getDefaultValue()));
-
- String optimization = getValue(cfg, RENDERING_QUALITY_ELEMENT);
- setParam(config, RENDERING_QUALITY,
- !(BitmapRendererOption.getValue(optimization) == RENDERING_SPEED));
-
- String color = getValue(cfg, COLOR_MODE);
- setParam(config, COLOR_MODE,
- getBufferedImageIntegerFromColor(BitmapRendererOption.getValue(color)));
- }
- }
-
- public BitmapRendererConfig build(FOUserAgent userAgent, Configuration cfg)
- throws FOPException {
- BitmapRendererConfig config = new BitmapRendererConfig(new DefaultFontConfigParser()
- .parse(cfg, userAgent.validateStrictly(),
- new FontEventAdapter(userAgent.getEventBroadcaster())));
- build(config, userAgent, cfg);
- return config;
- }
-
- private Integer getBufferedImageIntegerFromColor(BitmapRendererOption option) {
- if (option == null) {
- return null;
- }
- switch (option) {
- case COLOR_MODE_RGBA:
- return BufferedImage.TYPE_INT_ARGB;
- case COLOR_MODE_RGB:
- return BufferedImage.TYPE_INT_RGB;
- case COLOR_MODE_GRAY:
- return BufferedImage.TYPE_BYTE_GRAY;
- case COLOR_MODE_BINARY:
- case COLOR_MODE_BILEVEL:
- return BufferedImage.TYPE_BYTE_BINARY;
- default:
- return null;
- }
- }
-
- private Configuration getChild(Configuration cfg, BitmapRendererOption option) {
- return cfg.getChild(option.getName());
- }
-
- private String getValue(Configuration cfg, BitmapRendererOption option) {
- Object defaultValue = option.getDefaultValue();
- Object result = cfg.getChild(option.getName()).getValue(null);
- if (result == null || "".equals(result)) {
- result = defaultValue;
- }
- if (result == null) {
- return null;
- }
- if (result instanceof Color) {
- return ColorUtil.colorToString((Color) result);
- }
- return result.toString();
- }
-
- public String getMimeType() {
- return mimeType;
- }
- }
- }
|