using System;
using System.Globalization;
using System.Drawing;
using FastReport.Utils;
using FastReport.Barcode;
using System.Xml;
using System.Windows.Forms;
#if MSCHART
using FastReport.DataVisualization.Charting;
#endif
namespace FastReport.Import.JasperReports
{
///
/// The JasperReports units converter.
///
public static class UnitsConverter
{
#region Public Methods
///
/// Converts value to Boolean.
///
/// Boolen value as string.
public static bool ConvertBool(string str)
{
return str.ToLower() == "true";
}
///
/// Converts string to PictureBoxSizeMode.
///
///
///
public static PictureBoxSizeMode ConvertImageSizeMode(string value)
{
switch (value)
{
case "RetainShape":
return PictureBoxSizeMode.Zoom;
case "Clip":
return PictureBoxSizeMode.Normal;
case "FillFrame":
return PictureBoxSizeMode.StretchImage;
case "RealHeight":
case "RealSize":
return PictureBoxSizeMode.AutoSize;
}
return PictureBoxSizeMode.Normal;
}
///
/// Parse int value.
///
///
///
public static int ConvertInt(string strInt)
{
int result = 0;
int.TryParse(strInt, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out result);
return result;
}
///
/// Parse float value
///
///
///
public static float ConvertFloat(string strFloat)
{
float result = 0;
float.TryParse(strFloat, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out result);
return result;
}
///
/// Converts JasperReports Color.
///
/// The DevExpress Color value as string.
/// The Color value.
public static Color ConvertColor(string str)
{
if (!String.IsNullOrEmpty(str))
{
return ColorTranslator.FromHtml(str);
}
return Color.Black;
}
///
/// Converts string to QRCodeErrorCorrection.
///
///
///
public static QRCodeErrorCorrection ConvertErrorCorrection(string value)
{
switch (value)
{
case "M":
return QRCodeErrorCorrection.M;
case "Q":
return QRCodeErrorCorrection.Q;
case "H":
return QRCodeErrorCorrection.H;
case "L":
return QRCodeErrorCorrection.L;
default:
return QRCodeErrorCorrection.L;
}
}
///
/// Parse BorderLine from XmlNode.
///
///
///
public static BorderLine ConvertBorderLine(XmlNode node)
{
BorderLine line = new BorderLine();
if (node.Attributes["lineWidth"] != null)
line.Width = ConvertInt(node.Attributes["lineWidth"].Value) * DrawUtils.ScreenDpi / 96f;
if (node.Attributes["lineColor"] != null)
line.Color = ConvertColor(node.Attributes["lineColor"].Value);
if (node.Attributes["lineStyle"] != null)
line.Style = ConvertLineStyle(node.Attributes["lineStyle"].Value);
return line;
}
///
/// Converts JasperReports Border.
///
///
///
public static Border ConvertBorder(XmlNode border)
{
Border result = new Border();
foreach (XmlNode node in border.ChildNodes)
{
if (node.Name == "pen")
{
result.TopLine = ConvertBorderLine(node);
result.LeftLine = result.TopLine;
result.BottomLine = result.TopLine;
result.RightLine = result.TopLine;
result.Lines = BorderLines.All;
}
if (node.Name == "topPen")
{
result.TopLine = ConvertBorderLine(node);
result.Lines |= BorderLines.Top;
}
if (node.Name == "leftPen")
{
result.LeftLine = ConvertBorderLine(node);
result.Lines |= BorderLines.Left;
}
if (node.Name == "bottomPen")
{
result.BottomLine = ConvertBorderLine(node);
result.Lines |= BorderLines.Bottom;
}
if (node.Name == "rightPen")
{
result.RightLine = ConvertBorderLine(node);
result.Lines |= BorderLines.Right;
}
}
return result;
}
///
/// Converts the JasperReports BorderDashStyle to LineStyle.
///
/// The DevExpress BorderDashStyle value.
/// The LineStyle value.
public static LineStyle ConvertBorderDashStyle(string borderDashStyle)
{
if (borderDashStyle.Equals("Dot"))
{
return LineStyle.Dot;
}
else if (borderDashStyle.Equals("Dash"))
{
return LineStyle.Dash;
}
else if (borderDashStyle.Equals("DashDot"))
{
return LineStyle.DashDot;
}
else if (borderDashStyle.Equals("DashDotDot"))
{
return LineStyle.DashDotDot;
}
else if (borderDashStyle.Equals("Double"))
{
return LineStyle.Double;
}
return LineStyle.Solid;
}
///
/// Converts the JasperReports LineStyle to LineStyle.
///
/// The JasperReports LineStyle value.
/// The LineStyle value.
public static LineStyle ConvertLineStyle(string lineStyle)
{
if (lineStyle == "Dotted")
{
return LineStyle.Dot;
}
else if (lineStyle == "Dashed")
{
return LineStyle.Dash;
}
else if (lineStyle == "Double")
{
return LineStyle.Double;
}
return LineStyle.Solid;
}
///
/// Converts the JasperReports TextAlignment to HorzAlignment.
///
/// The JasperReports TextAlignment value.
/// The HorzAlign value.
public static HorzAlign ConvertTextAlignmentToHorzAlign(string textAlignment)
{
if (textAlignment.Contains("Center"))
{
return HorzAlign.Center;
}
if (textAlignment.Contains("Justified"))
{
return HorzAlign.Justify;
}
if (textAlignment.Contains("Right"))
{
return HorzAlign.Right;
}
return HorzAlign.Left;
}
///
/// Converts the JasperReports rotation to int.
///
///
///
public static int ConvertRotation(string rotation)
{
switch (rotation)
{
case "Right":
return 90;
case "Left":
return 270;
case "UpsideDown":
return 180;
}
return 0;
}
///
/// Converts the JasperReports TextAlignment to VertAlignment.
///
/// The JasperReports TextAlignment value.
/// The VertAlign value.
public static VertAlign ConvertTextAlignmentToVertAlign(string textAlignment)
{
if (textAlignment.Contains("Middle"))
{
return VertAlign.Center;
}
if (textAlignment.Contains("Bottom"))
{
return VertAlign.Bottom;
}
return VertAlign.Top;
}
///
/// Converts the JasperReports Barcode.Symbology to Barcode.Barcode.
///
/// The JasperReports Barcode.Symbology value as string.
/// The BarcodeObject instance.
public static void ConvertBarcodeSymbology(string symbology, BarcodeObject barcode)
{
switch (symbology)
{
case "ean128":
barcode.Barcode = new BarcodeEAN128();
break;
case "pdf417":
barcode.Barcode = new BarcodePDF417();
break;
case "ean13":
barcode.Barcode = new BarcodeEAN13();
break;
case "uspsintelligentmail":
case "usps":
barcode.Barcode = new BarcodeIntelligentMail();
break;
case "code128a":
case "code128b":
case "code128c":
case "code128":
barcode.Barcode = new Barcode128();
break;
case "code39":
barcode.Barcode = new Barcode39();
break;
case "code39 (extended)":
barcode.Barcode = new Barcode39Extended();
break;
case "codabar":
barcode.Barcode = new BarcodeCodabar();
break;
case "upca":
barcode.Barcode = new BarcodeUPC_A();
break;
case "interleaved2of5":
case "int2of5":
barcode.Barcode = new Barcode2of5Interleaved();
break;
case "std2of5":
barcode.Barcode = new Barcode2of5Industrial();
break;
case "postnet":
barcode.Barcode = new BarcodePostNet();
break;
case "upce":
barcode.Barcode = new BarcodeUPC_E0();
break;
case "datamatrix":
barcode.Barcode = new BarcodeDatamatrix();
break;
case "ean8":
barcode.Barcode = new BarcodeEAN8();
break;
default:
barcode.Barcode = new Barcode39();
break;
}
}
///
/// Convert JasperReports HyperlinkType to HyperlinkKind.
///
///
///
public static HyperlinkKind ConvertHyperlinkType(XmlNode node)
{
if (node.Attributes["hyperlinkType"] != null)
{
switch (node.Attributes["hyperlinkType"].Value)
{
case "LocalAnchor":
return HyperlinkKind.Bookmark;
case "LocalPage":
return HyperlinkKind.PageNumber;
case "Reference":
return HyperlinkKind.URL;
}
}
return HyperlinkKind.Custom;
}
#if MSCHART
///
/// Converts the JasperReports SeriesChartType to SeriesChartType.
///
///
///
public static SeriesChartType ConvertChartType(string value)
{
switch (value)
{
case "pie3DChart":
case "pieChart":
return SeriesChartType.Pie;
case "stackedBar3DChart":
case "stackedBarChart":
return SeriesChartType.StackedColumn;
case "xyBarChart":
case "bar3DChart":
case "barChart":
return SeriesChartType.Column;
case "scatterChart":
case "xyLineChart":
case "lineChart":
case "timeSeriesChart":
return SeriesChartType.Line;
case "c:spiderChart":
return SeriesChartType.Radar;
case "xyAreaChart":
case "areaChart":
return SeriesChartType.Area;
case "highLowChart":
return SeriesChartType.RangeColumn;
case "candlestickChart":
return SeriesChartType.Candlestick;
case "stackedAreaChart":
return SeriesChartType.StackedArea;
case "bubbleChart":
return SeriesChartType.Bubble;
case "thermometerChart":
case "meterChart":
case "ganttChart":
case "multiAxisPlot":
default:
return SeriesChartType.Column;
}
}
#endif
#endregion // Public Methods
}
}