1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.scenegraph.g2d.nodes;
14 import java.awt.Color;
\r
15 import java.awt.Font;
\r
16 import java.awt.FontMetrics;
\r
17 import java.awt.Graphics2D;
\r
18 import java.awt.geom.AffineTransform;
\r
19 import java.awt.geom.Point2D;
\r
20 import java.awt.geom.Rectangle2D;
\r
21 import java.io.IOException;
\r
23 import org.simantics.scenegraph.ExportableWidget.OutputWidget;
\r
24 import org.simantics.scenegraph.g2d.G2DNode;
\r
25 import org.simantics.scenegraph.g2d.G2DPDFRenderingHints;
\r
27 import com.lowagie.text.DocumentException;
\r
28 import com.lowagie.text.Element;
\r
29 import com.lowagie.text.Rectangle;
\r
30 import com.lowagie.text.pdf.FontMapper;
\r
31 import com.lowagie.text.pdf.PdfFormField;
\r
32 import com.lowagie.text.pdf.PdfWriter;
\r
33 import com.lowagie.text.pdf.TextField;
\r
36 public class TextNode extends G2DNode {
38 private static final long serialVersionUID = 8508750881358776559L;
40 protected Rectangle2D bounds = null;
41 protected String text = null;
42 protected Font font = null;
43 protected Color color = Color.BLACK;
46 public void setBounds(Rectangle2D bounds) {
51 public void setFont(Font font) {
56 public void setText(String text) {
60 public String getText() {
\r
65 public void setColor(Color color) {
70 public void render(Graphics2D g) {
\r
71 if (text == null || bounds == null || font == null || color == null)
\r
74 // PdfWriter writer = (PdfWriter) g.getRenderingHint(G2DPDFRenderingHints.KEY_PDF_WRITER);
\r
75 // if ( writer == null ) {
\r
76 // Write to Graphics2D
80 FontMetrics fm = g.getFontMetrics(font);
81 Rectangle2D rect = fm.getStringBounds(text, g);
82 float x = (float) ((bounds.getWidth() - rect.getWidth())/2 + bounds.getMinX());
83 float y = (float) ((bounds.getHeight() - rect.getHeight())/2 + bounds.getMinY());
\r
85 AffineTransform at = g.getTransform();
\r
86 g.transform(getTransform());
87 g.drawString(text, x, (float)(y+rect.getHeight()));
\r
93 FontMapper mapper = (FontMapper) g.getRenderingHint(G2DPDFRenderingHints.KEY_PDF_FONTMAPPER);
\r
94 //text.setBorderStyle(PdfBorderDictionary.STYLE_BEVELED);
\r
95 AffineTransform at = g.getTransform();
\r
96 FontMetrics fm = g.getFontMetrics(font);
\r
97 Rectangle2D rect = fm.getStringBounds(text, g);
\r
98 float x = (float) ((bounds.getWidth() - rect.getWidth())/2 + bounds.getMinX());
\r
99 float y = (float) ((bounds.getHeight() - rect.getHeight())/2 + bounds.getMinY());
\r
101 Point2D pt1 = at.transform(new Point2D.Float(x, y+(float)rect.getHeight()), null);
\r
102 Point2D pt2 = at.transform(new Point2D.Float(x+(float)rect.getWidth(), y), null);
\r
103 Rectangle rectangle = new Rectangle(
\r
104 (float) pt1.getX(),
\r
105 (float) pt1.getY(),
\r
106 (float) pt2.getX(),
\r
107 (float) pt2.getY());
\r
108 TextField text = new TextField(writer, rectangle, "approvedBy");
\r
109 text.setText(this.text);
\r
110 text.setFont(mapper.awtToPdf(font));
\r
111 text.setFontSize(0);
\r
112 text.setAlignment(Element.ALIGN_LEFT);
\r
113 text.setRotation(90);
\r
114 text.setOptions(TextField.READ_ONLY);
\r
115 PdfFormField field = text.getTextField();
\r
116 writer.addAnnotation(field);
\r
117 } catch (IOException e) {
\r
118 e.printStackTrace();
\r
119 } catch (DocumentException e) {
\r
120 e.printStackTrace();
\r
127 // public Rectangle2D getBoundsInLocal() {
132 public Rectangle2D getBoundsInLocal() {
\r
137 public Rectangle2D getBounds() {
\r