Package er.pdf.builder

Source Code of er.pdf.builder.ERPDFReplacedElementFactory

package er.pdf.builder;

import org.w3c.dom.Element;
import org.xhtmlrenderer.extend.FSImage;
import org.xhtmlrenderer.extend.ReplacedElement;
import org.xhtmlrenderer.extend.UserAgentCallback;
import org.xhtmlrenderer.layout.LayoutContext;
import org.xhtmlrenderer.pdf.ITextFSImage;
import org.xhtmlrenderer.pdf.ITextImageElement;
import org.xhtmlrenderer.pdf.ITextOutputDevice;
import org.xhtmlrenderer.pdf.ITextReplacedElementFactory;
import org.xhtmlrenderer.render.BlockBox;

import com.lowagie.text.Image;
import com.webobjects.appserver.WOApplication;
import com.webobjects.appserver.WOResourceManager;
import com.webobjects.appserver._private.WOURLValuedElementData;
import com.webobjects.foundation.NSData;

/**
* ERPDFReplacedElementFactory handles replacement of dynamically generated WOImage data.
*
* @author qdolan
*/
public class ERPDFReplacedElementFactory extends ITextReplacedElementFactory {

  public ERPDFReplacedElementFactory(ITextOutputDevice outputDevice) {
    super(outputDevice);
  }

  @Override
  public ReplacedElement createReplacedElement(LayoutContext context, BlockBox box, UserAgentCallback callback, int cssWidth, int cssHeight) {
    Element element = box.getElement();

    if (element.getNodeName().equals("img")
        && element.getAttribute("src").matches(".*/wr\\?wodata=[\\-0-9]*$")) {
      String key = element.getAttribute("src").replaceFirst(".*/wr\\?wodata=(.*)", "$1");
      try {
        NSData data = cachedDataForKey(key);
        FSImage fsImage = new ITextFSImage(Image.getInstance(data.bytes()));
        if (cssWidth != -1 || cssHeight != -1) {
          fsImage.scale(cssWidth, cssHeight);
        }
        return new ITextImageElement(fsImage);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }

    return super.createReplacedElement(context, box, callback, cssWidth, cssHeight);
  }

  private NSData cachedDataForKey(String key) {
    WOResourceManager resourceManager =  WOApplication.application().resourceManager();
    WOURLValuedElementData elementData = resourceManager._cachedDataForKey(key);
    if (elementData.isTemporary()) {
      resourceManager.removeDataForKey(key, null);
    }
    return elementData.data();
  }
}
TOP

Related Classes of er.pdf.builder.ERPDFReplacedElementFactory

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.