Package jimm.datavision.layout

Source Code of jimm.datavision.layout.CSSHTMLLE

package jimm.datavision.layout;
import jimm.datavision.*;
import jimm.datavision.field.*;
import jimm.util.StringUtils;
import java.io.PrintWriter;
import java.awt.Color;
import javax.swing.ImageIcon;

/**
* A TABLE free DIV/CSS HTML layout engine.
*
* @author David Bennett, <a href="mailto:dbennett@bensoft.com">dbennett@bensoft.com</a>
*
* Adapted from Jim Menard's HTMLLE.java
*
*/
public class CSSHTMLLE extends SortedLayoutEngine {

/**
* Constructor.
*
* @param out a print writer
*/
public CSSHTMLLE(PrintWriter out) {
    super(out);
}

protected void doStart() {
    out.println("<html>");
    out.println("<head>");
    out.println("<!-- Generated by DataVision version " + info.Version
    + " -->");
    out.println("<!-- " + info.URL + " -->");
    String title = report.getTitle();
    if (title != null && title.length() > 0)
  out.println("<title>" + report.getTitle() + "</title>");
    out.println("</head>");
    out.println("<body bgcolor=\"white\">");
}

protected void doEnd() {
    out.println("</body>");
    out.println("</html>");
    out.flush();
}

protected void doOutputSection(Section s) {
    out.print("<div style=\"position:relative;top:0;left:0;");
    out.println("width:"+pageWidth()+"pt;height:"+s.getOutputHeight()+"pt;overflow:visible;\">");
    super.doOutputSection(s);
    out.println("</div><br clear=\"left\"/>");
}

protected void doOutputField(Field field) {
    Format format = outputCellStart(field);
    // Style attribute courtesy of Brendon Price <Brendon.Price@sytec.co.nz>
    out.print("<span style=\"");
    if (format.getFontFamilyName() != null)
  out.print("font-family: " + format.getFontFamilyName() + "; ");
    out.print("font-size: " + format.getSize() + "pt; ");
    outputColor(format.getColor());

    // Border code courtesy of Khadiyd Idris <khad@linuxindo.com>
    Border b = field.getBorderOrDefault();
    String bcolor = "black";
    if (b.getColor() != null) {
  bcolor = "#" + Integer.toHexString(b.getColor().getRed())
      + Integer.toHexString(b.getColor().getGreen())
      + Integer.toHexString(b.getColor().getBlue());
    }

    if (b.getTop() != null)
  out.print("border-top: solid " + bcolor + " "
      + b.getTop().getThickness() + "pt; ");
    if (b.getLeft() != null)
  out.print("border-left: solid " + bcolor + " "
      + b.getLeft().getThickness() + "pt; ");
    if (b.getBottom() != null)
  out.print("border-bottom: solid " + bcolor + " "
      + b.getBottom().getThickness() + "pt; ");
    if (b.getRight() != null)
  out.print("border-right: solid " + bcolor + " "
      + b.getRight().getThickness() + "pt; ");

    out.print("\">");

    if (format.isBold()) out.print("<b>");
    if (format.isItalic()) out.print("<i>");
    if (format.isUnderline()) out.print("<u>");

    String str = field.toString();
    if (str == null || str.length() == 0)
  str = "&nbsp;";

    // Fix courtesy of Brendon Price <Brendon.Price@sytec.co.nz>
    if ("&nbsp;".equals(str))
  out.print(str);
    else
  out.print(StringUtils.newlinesToXHTMLBreaks(StringUtils.escapeHTML(str)));

    if (format.isUnderline()) out.print("</u>");
    if (format.isItalic()) out.print("</i>");
    if (format.isBold()) out.print("</b>");
    out.print("</span>");

    outputCellEnd();
}

protected void doOutputImage(ImageField image) {
    if (image == null || image.getImageURL() == null)
  return;

    outputCellStart(image);

    ImageIcon icon = image.getImageIcon(); // For width and height
    String url = image.getImageURL().toString();
    if (url.startsWith("file:"))
  url = url.substring(5);

    // Make an alt attribute from the URL
    String alt = url;
    int pos = alt.lastIndexOf("/");
    if (pos != -1)
  alt = alt.substring(pos + 1);

    out.print("<img src=\"" + StringUtils.escapeHTML(url) + "\" alt=\""
        + StringUtils.escapeHTML(alt)
        + "\" width=\"" + icon.getIconWidth()
        + "\" height=\"" + icon.getIconHeight()
        + "\">");
    outputCellEnd();
}

protected Format outputCellStart(Field field) {
    Format format = field.getFormat();
    Rectangle bounds = field.getBounds();

    String align = null;
    switch (format.getAlign()) {
      case Format.ALIGN_LEFT: align = "left"; break;
      case Format.ALIGN_CENTER: align = "center"; break;
      case Format.ALIGN_RIGHT: align = "right"; break;
    }

    out.print("<div style=\"position:absolute;width:"+(int)bounds.width+"pt;");
    out.print("height:"+(int)field.getOutputHeight()+"pt;text-align:"+align+";");
    out.print("left:"+(int)bounds.x+"pt;top:"+(int)bounds.y+"pt;");
    if (!format.isWrap())
      out.print("white-space:nowrap;");
    out.println("\">");

    return format;
}

protected void outputCellEnd() {
    out.println("</div>");
}

protected void outputColor(Color c) {
    if (c.equals(Color.black))
  return;

    int[] rgb = new int[3];
    rgb[0] = c.getRed();
    rgb[1] = c.getGreen();
    rgb[2] = c.getBlue();
    out.print(" color: #");
    for (int i = 0; i < 3; ++i) {
  if (rgb[i] < 16) out.print('0');
  out.print(Integer.toHexString(rgb[i]));
    }
}

protected void doOutputLine(Line line) {}

}
TOP

Related Classes of jimm.datavision.layout.CSSHTMLLE

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.