Package org.projectforge.renderer

Source Code of org.projectforge.renderer.BatikImageRenderer

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.renderer;

import java.io.ByteArrayOutputStream;

import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.ImageTranscoder;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.fop.svg.PDFTranscoder;
import org.projectforge.xml.stream.XmlHelper;
import org.w3c.dom.Document;

public class BatikImageRenderer
{
  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(BatikImageRenderer.class);

  /**
   * Renders a png image from the SVG document.
   * @param document
   * @param width
   * @param imageFormat The image file format of the output.
   * @return
   */
  public static byte[] getByteArray(final Document document, final int width, final ImageFormat imageFormat)
  {
    if (imageFormat.isIn(ImageFormat.PNG, ImageFormat.JPEG) == true) {
      return getRasterImageByteArray(document, width, imageFormat);
    }
    if (imageFormat == ImageFormat.PDF == true) {
      return getPDFByteArray(document, width);
    }
    if (imageFormat == ImageFormat.SVG == true) {
      return getSVGByteArray(document, width);
    }
    throw new UnsupportedOperationException("Image type '" + imageFormat + "' not yet supported.");
  }

  private static byte[] getRasterImageByteArray(final Document document, final int width, final ImageFormat imageFormat)
  {
    // Create a image transcoder
    final ImageTranscoder t;
    if (imageFormat == ImageFormat.JPEG) {
      t = new JPEGTranscoder();
      t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8));
      t.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, new Float(width));
      // } else if (imageFormat == ImageFormat.TIFF) {
      // t = new TIFFTranscoder();
      // t.addTranscodingHint(TIFFTranscoder.KEY_WIDTH, new Float(width));
    } else {
      t = new PNGTranscoder();
      t.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(width));
    }
    // Set the transcoding hints.
    TranscoderInput input = new TranscoderInput(document);
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final TranscoderOutput output = new TranscoderOutput(baos);
    // Save the image.
    try {
      t.transcode(input, output);
    } catch (TranscoderException ex) {
      log.fatal("Exception encountered " + ex, ex);
    }
    return baos.toByteArray();
  }

  private static byte[] getSVGByteArray(final Document document, final int width)
  {
    final String result = XmlHelper.toString(document, true);
    return result.getBytes();
  }

  private static byte[] getPDFByteArray(final Document document, final int width)
  {
    // Create a pdf transcoder
    final PDFTranscoder t = new PDFTranscoder();
    t.addTranscodingHint(PDFTranscoder.KEY_AUTO_FONTS, false);
    t.addTranscodingHint(PDFTranscoder.KEY_WIDTH, new Float(width));
    TranscoderInput input = new TranscoderInput(document);
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final TranscoderOutput output = new TranscoderOutput(baos);
    // Save the image.
    try {
      t.transcode(input, output);
    } catch (TranscoderException ex) {
      log.fatal("Exception encountered " + ex, ex);
    }
    return baos.toByteArray();
  }
}
TOP

Related Classes of org.projectforge.renderer.BatikImageRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.