Changeset 3433

Show
Ignore:
Timestamp:
03/23/10 16:20:40 (2 years ago)
Author:
yves
Message:

Added label support to vector layers (thx Cédric) (closes #561)

Location:
print/trunk
Files:
2 added
2 modified

Legend:

Unmodified
Added
Removed
  • print/trunk/src/main/java/org/mapfish/print/PDFUtils.java

    r3397 r3433  
    2121 
    2222import com.lowagie.text.*; 
     23import com.lowagie.text.pdf.BaseFont; 
    2324import com.lowagie.text.pdf.PdfContentByte; 
    2425import com.lowagie.text.pdf.PdfPCell; 
     
    384385        return image; 
    385386    } 
     387     
     388        public static BaseFont getBaseFont(String fontFamily, String fontSize, 
     389                        String fontWeight) { 
     390                int myFontValue; 
     391                float myFontSize; 
     392                int myFontWeight; 
     393                if (fontFamily.toUpperCase().contains("COURIER")) { 
     394                        myFontValue = Font.COURIER; 
     395                } else if (fontFamily.toUpperCase().contains("HELVETICA")) { 
     396                        myFontValue = Font.HELVETICA; 
     397                } else if (fontFamily.toUpperCase().contains("ROMAN")) { 
     398                        myFontValue = Font.TIMES_ROMAN; 
     399                } else { 
     400                        myFontValue = Font.HELVETICA; 
     401                } 
     402                myFontSize = (float) Double.parseDouble(fontSize.toLowerCase() 
     403                                .replaceAll("px", "")); 
     404                if (fontWeight.toUpperCase().contains("NORMAL")) { 
     405                        myFontWeight = Font.NORMAL; 
     406                } else if (fontWeight.toUpperCase().contains("BOLD")) { 
     407                        myFontWeight = Font.BOLD; 
     408                } else if (fontWeight.toUpperCase().contains("ITALIC")) { 
     409                        myFontWeight = Font.ITALIC; 
     410                } else { 
     411                        myFontWeight = Font.NORMAL; 
     412                } 
     413                Font pdfFont = new Font(myFontValue, myFontSize, myFontWeight); 
     414                BaseFont bf = pdfFont.getCalculatedBaseFont(false); 
     415                return bf; 
     416        } 
     417         
     418        public static int getHorizontalAlignment(String labelAlign) { 
     419                /* Valid values for horizontal alignment: "l"=left, "c"=center, "r"=right. */ 
     420                int myAlignment = PdfContentByte.ALIGN_LEFT; 
     421                if (labelAlign.toUpperCase().contains("L")) { 
     422                        myAlignment = PdfContentByte.ALIGN_LEFT; 
     423                } 
     424                if (labelAlign.toUpperCase().contains("C")) { 
     425                        myAlignment = PdfContentByte.ALIGN_CENTER; 
     426                } 
     427                if (labelAlign.toUpperCase().contains("R")) { 
     428                        myAlignment = PdfContentByte.ALIGN_RIGHT; 
     429                } 
     430                return myAlignment; 
     431        } 
     432         
     433        public static float getVerticalOffset(String labelAlign, float fontHeight) { 
     434                /* Valid values for vertical alignment: "t"=top, "m"=middle, "b"=bottom. */ 
     435                float myOffset = (float) 0.0; 
     436                if (labelAlign.toUpperCase().contains("T")) { 
     437                        myOffset = fontHeight; 
     438                } 
     439                if (labelAlign.toUpperCase().contains("M")) { 
     440                        myOffset = fontHeight/2; 
     441                } 
     442                if (labelAlign.toUpperCase().contains("B")) { 
     443                        myOffset = (float) 0.0; 
     444                } 
     445                return myOffset; 
     446        } 
    386447} 
  • print/trunk/src/main/java/org/mapfish/print/map/renderers/vector/PointRenderer.java

    r3397 r3433  
    2222import com.vividsolutions.jts.geom.Point; 
    2323import com.vividsolutions.jts.geom.Coordinate; 
     24import com.lowagie.text.pdf.BaseFont; 
    2425import com.lowagie.text.pdf.PdfContentByte; 
    2526import com.lowagie.text.pdf.PdfGState; 
     
    3031import org.mapfish.print.PDFUtils; 
    3132import org.mapfish.print.InvalidValueException; 
     33import org.mapfish.print.config.ColorWrapper; 
    3234import org.mapfish.print.utils.PJsonObject; 
    3335 
     
    9092        float offsetX = style.optFloat("graphicXOffset", -width / 2.0f); 
    9193        float offsetY = style.optFloat("graphicYOffset", -height / 2.0f); 
     94                // See Feature/Vector.js for more information about labels 
     95                String label = style.optString("label"); 
     96                String labelAlign = style.optString("labelAlign", "lb"); 
     97                /* 
     98                 * Valid values for horizontal alignment: "l"=left, "c"=center, "r"=right.  
     99                 * Valid values for vertical alignment: "t"=top, "m"=middle, "b"=bottom. 
     100                 */ 
     101                float labelXOffset = style.optFloat("labelXOffset", (float) 0.0); 
     102                float labelYOffset = style.optFloat("labelYOffset", (float) 0.0); 
     103                String fontColor = style.optString("fontColor", "#000000"); 
     104                /* Supported itext fonts: COURIER, HELVETICA, TIMES_ROMAN */ 
     105                String fontFamily = style.optString("fontFamily", "HELVETICA"); 
     106                String fontSize = style.optString("fontSize", "12"); 
     107                String fontWeight = style.optString("fontWeight", "normal"); 
    92108 
    93109        if (style.optString("externalGraphic") != null) { 
     
    124140            dc.fillStroke(); 
    125141 
    126         } else { 
     142        } else if (label != null && label.length() > 0) { 
     143                        BaseFont bf = PDFUtils.getBaseFont(fontFamily, fontSize, fontWeight); 
     144                        float fontHeight = (float) Double.parseDouble(fontSize.toLowerCase().replaceAll("px", "")) * f; 
     145                        dc.setFontAndSize(bf, fontHeight); 
     146                        dc.setColorFill(ColorWrapper.convertColor(fontColor)); 
     147                        state.setFillOpacity((float) 1.0); 
     148                        dc.setGState(state); 
     149                        dc.beginText(); 
     150                        dc.setTextMatrix((float) coordinate.x + labelXOffset * f, (float) coordinate.y + labelYOffset * f); 
     151                        dc.setGState(state); 
     152                        dc.showTextAligned(PDFUtils.getHorizontalAlignment(labelAlign), label, (float) coordinate.x + labelXOffset * f, (float) coordinate.y + labelYOffset * f - PDFUtils.getVerticalOffset(labelAlign, fontHeight), 0); 
     153                        dc.endText(); 
     154                } else { 
    127155            PolygonRenderer.applyStyle(context, dc, style, state); 
    128156            dc.setGState(state);