else if (
node.getNodeType() == Node.ELEMENT_NODE
&& NODE_style.equals(node.getNodeName())
)
{
NamedNodeMap nodeAttrs = node.getAttributes();
Map styleAttrs = new HashMap();
if (nodeAttrs.getNamedItem(ATTRIBUTE_fontName) != null)
{
styleAttrs.put(
TextAttribute.FAMILY,
nodeAttrs.getNamedItem(ATTRIBUTE_fontName).getNodeValue()
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_isBold) != null)
{
styleAttrs.put(
TextAttribute.WEIGHT,
Boolean.valueOf(nodeAttrs.getNamedItem(ATTRIBUTE_isBold).getNodeValue()).booleanValue()
? TextAttribute.WEIGHT_BOLD : TextAttribute.WEIGHT_REGULAR
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_isItalic) != null)
{
styleAttrs.put(
TextAttribute.POSTURE,
Boolean.valueOf(nodeAttrs.getNamedItem(ATTRIBUTE_isItalic).getNodeValue()).booleanValue()
? TextAttribute.POSTURE_OBLIQUE : TextAttribute.POSTURE_REGULAR
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_isUnderline) != null)
{
styleAttrs.put(
TextAttribute.UNDERLINE,
Boolean.valueOf(nodeAttrs.getNamedItem(ATTRIBUTE_isUnderline).getNodeValue()).booleanValue()
? TextAttribute.UNDERLINE_ON : null
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_isStrikeThrough) != null)
{
styleAttrs.put(
TextAttribute.STRIKETHROUGH,
Boolean.valueOf(nodeAttrs.getNamedItem(ATTRIBUTE_isStrikeThrough).getNodeValue()).booleanValue()
? TextAttribute.STRIKETHROUGH_ON : null
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_size) != null)
{
styleAttrs.put(
TextAttribute.SIZE,
new Float(nodeAttrs.getNamedItem(ATTRIBUTE_size).getNodeValue())
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_pdfFontName) != null)
{
styleAttrs.put(
JRTextAttribute.PDF_FONT_NAME,
nodeAttrs.getNamedItem(ATTRIBUTE_pdfFontName).getNodeValue()
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_pdfEncoding) != null)
{
styleAttrs.put(
JRTextAttribute.PDF_ENCODING,
nodeAttrs.getNamedItem(ATTRIBUTE_pdfEncoding).getNodeValue()
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_isPdfEmbedded) != null)
{
styleAttrs.put(
JRTextAttribute.IS_PDF_EMBEDDED,
Boolean.valueOf(nodeAttrs.getNamedItem(ATTRIBUTE_isPdfEmbedded).getNodeValue())
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_forecolor) != null)
{
Color color =
JRColorUtil.getColor(
nodeAttrs.getNamedItem(ATTRIBUTE_forecolor).getNodeValue(),
Color.black
);
styleAttrs.put(
TextAttribute.FOREGROUND,
color
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_backcolor) != null)
{
Color color =
JRColorUtil.getColor(
nodeAttrs.getNamedItem(ATTRIBUTE_backcolor).getNodeValue(),
Color.black
);
styleAttrs.put(
TextAttribute.BACKGROUND,
color
);
}
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_bold.equalsIgnoreCase(node.getNodeName()))
{
Map styleAttrs = new HashMap();
styleAttrs.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_italic.equalsIgnoreCase(node.getNodeName()))
{
Map styleAttrs = new HashMap();
styleAttrs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_underline.equalsIgnoreCase(node.getNodeName()))
{
Map styleAttrs = new HashMap();
styleAttrs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_sup.equalsIgnoreCase(node.getNodeName()))
{
Map styleAttrs = new HashMap();
styleAttrs.put(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER);
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_sub.equalsIgnoreCase(node.getNodeName()))
{
Map styleAttrs = new HashMap();
styleAttrs.put(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUB);
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_font.equalsIgnoreCase(node.getNodeName()))
{
NamedNodeMap nodeAttrs = node.getAttributes();
Map styleAttrs = new HashMap();
if (nodeAttrs.getNamedItem(ATTRIBUTE_size) != null)
{
styleAttrs.put(
TextAttribute.SIZE,
new Float(nodeAttrs.getNamedItem(ATTRIBUTE_size).getNodeValue())
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_color) != null)
{
Color color =
JRColorUtil.getColor(
nodeAttrs.getNamedItem(ATTRIBUTE_color).getNodeValue(),
Color.black
);
styleAttrs.put(
TextAttribute.FOREGROUND,
color
);
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_fontFace) != null)
{
String fontFaces = nodeAttrs.getNamedItem(ATTRIBUTE_fontFace).getNodeValue();
StringTokenizer t = new StringTokenizer(fontFaces, ",");
while (t.hasMoreTokens())
{
String face = t.nextToken().trim();
if (AVAILABLE_FONT_FACE_NAMES.contains(face))
{
styleAttrs.put(TextAttribute.FAMILY, face);
break;
}
}
}
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_br.equalsIgnoreCase(node.getNodeName()))
{
styledText.append("\n");
int startIndex = styledText.length();
resizeRuns(styledText.getRuns(), startIndex, 1);
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(new HashMap(), startIndex, styledText.length()));
if (startIndex < styledText.length()) {
styledText.append("\n");
resizeRuns(styledText.getRuns(), startIndex, 1);
}
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_li.equalsIgnoreCase(node.getNodeName()))
{
String tmpText = styledText.getText();
if(tmpText.length() > 0 && !tmpText.endsWith("\n"))
{
styledText.append("\n");
}
styledText.append(" \u2022 ");
int startIndex = styledText.length();
resizeRuns(styledText.getRuns(), startIndex, 1);
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(new HashMap(), startIndex, styledText.length()));
// if the text in the next node does not start with a '\n', or
// if the next node is not a <li /> one, we have to append a new line
Node nextNode = node.getNextSibling();
String textContent = getFirstTextOccurence(nextNode);
if(nextNode != null &&
!((nextNode.getNodeType() == Node.ELEMENT_NODE &&
NODE_li.equalsIgnoreCase(nextNode.getNodeName()) ||
(textContent != null && textContent.startsWith("\n")))
))
{
styledText.append("\n");
resizeRuns(styledText.getRuns(), startIndex, 1);
}
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_a.equalsIgnoreCase(node.getNodeName()))
{
if (hyperlink == null)
{
NamedNodeMap nodeAttrs = node.getAttributes();
Map styleAttrs = new HashMap();
hyperlink = new JRBasePrintHyperlink();
hyperlink.setHyperlinkType(HyperlinkTypeEnum.REFERENCE);
styleAttrs.put(JRTextAttribute.HYPERLINK, hyperlink);
if (nodeAttrs.getNamedItem(ATTRIBUTE_href) != null)
{
hyperlink.setHyperlinkReference( nodeAttrs.getNamedItem(ATTRIBUTE_href).getNodeValue());
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_type) != null)
{
hyperlink.setLinkType(nodeAttrs.getNamedItem(ATTRIBUTE_type).getNodeValue());
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_target) != null)
{
hyperlink.setLinkTarget(nodeAttrs.getNamedItem(ATTRIBUTE_target).getNodeValue());
}
int startIndex = styledText.length();
parseStyle(styledText, node);
styledText.addRun(new JRStyledText.Run(styleAttrs, startIndex, styledText.length()));
hyperlink = null;
}
else
{
throw new SAXException("Hyperlink <a> tags cannot be nested.");
}
}
else if (node.getNodeType() == Node.ELEMENT_NODE && NODE_param.equalsIgnoreCase(node.getNodeName()))
{
if (hyperlink == null)
{
throw new SAXException("Hyperlink <param> tags must appear inside an <a> tag only.");
}
else
{
NamedNodeMap nodeAttrs = node.getAttributes();
JRPrintHyperlinkParameter parameter = new JRPrintHyperlinkParameter();
if (nodeAttrs.getNamedItem(ATTRIBUTE_name) != null)
{
parameter.setName(nodeAttrs.getNamedItem(ATTRIBUTE_name).getNodeValue());
}
if (nodeAttrs.getNamedItem(ATTRIBUTE_valueClass) != null)
{
parameter.setValueClass(nodeAttrs.getNamedItem(ATTRIBUTE_valueClass).getNodeValue());
}
String strValue = node.getTextContent();
if (strValue != null)
{