using System;
using System.Drawing;
namespace Dongke.WinForm.Controls.InvoiceLayout
{
/// ====================================================================
/// 类名:LayoutUtility
///
/// Layout共通方法
///
/// ====================================================================
public static class LayoutCommon
{
#region 成员变量
// DPI用
private static float _dpi = 300;
//private static readonly Control _control;
// 图形
//private static readonly Graphics _graphics;
// 默认字体
//private static readonly Font _defaultItemFont;
// 选择画刷
//private static readonly SolidBrush _selectedBrush;
// 打印范围用绿线标识
//private static readonly Pen _greedDotPen;
// StringFormat
private static readonly StringFormat _stringFormatHorizontal;
// 文本Item的默认宽
//private static readonly float _defaultTextItemSizeWidth = 0f;
// 文本Item的默认高
//private static readonly float _defaultTextItemSizeHeight = 0f;
// JPカルチャ
//private static readonly CultureInfo _cultureInfoJP;
// 格式
//public static DataTable SYSFormat = new DataTable("SYSFormat");
// 默认值
//public static DataTable SYSDefaultValue = new DataTable("SYSDefaultValue");
#endregion 成员变量
#region 构造函数
///
/// 构造函数
///
static LayoutCommon()
{
//_control = new Control();
//_graphics = _control.CreateGraphics();
//_graphics.PageUnit = GraphicsUnit.Millimeter;
//_selectedBrush = new SolidBrush(Color.LightGray);
//_greedDotPen = new Pen(Color.Green, 1);
//_greedDotPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
//_cultureInfoJP = new CultureInfo(LayoutConsts.CULTUREINFO_JP);
//_cultureInfoJP.DateTimeFormat.Calendar = new JapaneseCalendar();
_stringFormatHorizontal = new StringFormat(StringFormat.GenericTypographic);
_stringFormatHorizontal.Alignment = StringAlignment.Center;
_stringFormatHorizontal.LineAlignment = StringAlignment.Center;
_stringFormatHorizontal.LineAlignment = StringAlignment.Near;
_stringFormatHorizontal.FormatFlags = StringFormatFlags.FitBlackBox
| StringFormatFlags.NoWrap
| StringFormatFlags.NoClip;
//_defaultItemFont = new Font(LayoutConsts.ITEM_FONT_FAMILYNAME_DEFAULT,
// LayoutConsts.ITEM_FONT_EMSIZE_DEFAULT);
//float fontHeight = Convert.ToSingle(Math.Ceiling(GetMaxSizeF(_defaultItemFont).Height * 10) / 10);
//_defaultTextItemSizeHeight = LayoutConsts.TEXT_MARGIN + LayoutConsts.TEXT_MARGIN + fontHeight;
//_defaultTextItemSizeWidth = 40f;
//Stream sysFormat = System.Reflection.Assembly.GetExecutingAssembly().
// GetManifestResourceStream(@"Dongke.IBOSS.Framework.InvoiceLayout.Resources.SYSFormat.xml");
//SYSFormat.ReadXml(sysFormat);
//Stream sysDefaultValue = System.Reflection.Assembly.GetExecutingAssembly().
// GetManifestResourceStream(@"Dongke.IBOSS.Framework.InvoiceLayout.Resources.SYSDefaultValue.xml");
//SYSDefaultValue.ReadXml(sysDefaultValue);
}
#endregion 构造函数
#region 属性
/////
///// 获取系统DPI
/////
//public static Graphics ControlGraphics
//{
// get
// {
// return _graphics;
// }
//}
///
/// 获取系统DPI
///
public static float DPI
{
get
{
return _dpi;
}
set
{
_dpi = value;
}
}
/////
///// 默认字体
/////
//public static Font DefaultItemFont
//{
// get
// {
// return (Font)_defaultItemFont.Clone();
// }
//}
/////
///// 选择画刷
/////
//public static SolidBrush SelectedBrush
//{
// get
// {
// return _selectedBrush;
// }
//}
/////
///// 打印范围用绿线标识
/////
//public static Pen GreedDotPen
//{
// get
// {
// return _greedDotPen;
// }
//}
///
/// StringFormat
///
public static StringFormat StringFormatHorizontal
{
get
{
return _stringFormatHorizontal;
}
}
/////
///// 文本Item默认宽
/////
//public static float DefaultTextItemSizeWidth
//{
// get
// {
// return _defaultTextItemSizeWidth;
// }
//}
/////
///// 文本Item默认高
/////
//public static float DefaultTextItemSizeHeight
//{
// get
// {
// return _defaultTextItemSizeHeight;
// }
//}
//public static CultureInfo CultureInfoJP
//{
// get
// {
// return _cultureInfoJP;
// }
//}
#endregion 属性
#region 函数
///
/// 1/100 英寸转换为毫米
///
///
/// 表示倍率 100%
///
/// 1/100 英寸
/// 毫米
public static float Inch100ToMillimeter(int inch100)
{
float mm = inch100 * LayoutConsts.MILLIMETER_PER_INCH / 100;
return mm;
}
///
/// 1/100 英寸转换为毫米
///
///
/// 表示倍率 100%
///
/// 1/100 英寸
/// 毫米
public static float Inch100ToMillimeter(float inch100)
{
float mm = inch100 * LayoutConsts.MILLIMETER_PER_INCH / 100;
return mm;
}
///
/// 磅转换为毫米
///
///
/// 表示倍率 100%
///
/// 磅
/// 毫米
public static float PointToMillimeter(float point)
{
float mm = point / LayoutConsts.POINT_PER_INCH * LayoutConsts.MILLIMETER_PER_INCH;
return mm;
}
///
/// 磅转换为像素
///
///
/// 表示倍率 100%
///
/// 磅
/// 像素
public static int PointToPixel(float point)
{
decimal pixel = System.Convert.ToDecimal(point) /
System.Convert.ToDecimal(LayoutConsts.POINT_PER_INCH) *
System.Convert.ToDecimal(DPI);
return System.Convert.ToInt32(Math.Round(pixel, 0));
}
///
/// 毫米转换为1/100 英寸
///
///
/// 表示倍率 100%
///
/// 毫米
/// 1/100 英寸
public static int MillimeterToInch100(float mm)
{
float inch100 = mm / LayoutConsts.MILLIMETER_PER_INCH * 100;
return System.Convert.ToInt32(Math.Round(inch100, 0));
}
///
/// 毫米转换为1/100 英寸
///
///
/// 表示倍率 100%
///
/// 毫米
/// 1/100 英寸
public static float MillimeterToInch100Single(float mm)
{
float inch100 = mm / LayoutConsts.MILLIMETER_PER_INCH * 100;
return inch100;
}
///
/// 毫米转换为像素
///
///
/// 表示倍率 100%
///
/// 毫米
/// 像素
public static int MillimeterToPixel(float mm)
{
decimal pixel = System.Convert.ToDecimal(mm) /
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) *
System.Convert.ToDecimal(DPI);
return System.Convert.ToInt32(Math.Round(pixel, 0));
}
public static int MillimeterToPixel(float mm, float dpi)
{
decimal pixel = System.Convert.ToDecimal(mm) /
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) *
System.Convert.ToDecimal(dpi);
return System.Convert.ToInt32(Math.Round(pixel, 0));
}
///
/// 毫米转换为像素
///
/// 毫米
/// 表示倍率%
/// 像素
public static int MillimeterToPixel(float mm, int paperZoom)
{
if (0 < paperZoom)
{
decimal pixel = System.Convert.ToDecimal(mm) /
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) *
System.Convert.ToDecimal(DPI) *
System.Convert.ToDecimal(paperZoom) / 100m;
return System.Convert.ToInt32(Math.Round(pixel, 0));
}
else
{
return 0;
}
}
///
/// 毫米转换为像素
///
/// 毫米
/// 表示倍率%
/// 像素
public static int MillimeterToPixelDpi(float mm, float dpi)
{
decimal pixel = System.Convert.ToDecimal(mm) /
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) *
System.Convert.ToDecimal(dpi);
return System.Convert.ToInt32(Math.Round(pixel, 0));
}
///
/// 毫米转换为像素
///
/// 毫米
/// 表示倍率%
/// 像素
public static int MillimeterToPixel(float mm, double paperZoom)
{
if (0 < paperZoom)
{
decimal pixel = System.Convert.ToDecimal(mm) /
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) *
System.Convert.ToDecimal(DPI) *
System.Convert.ToDecimal(paperZoom);
return System.Convert.ToInt32(Math.Round(pixel, 0));
}
else
{
return 0;
}
}
///
/// 毫米转换为像素
///
/// 毫米
/// 表示倍率%
/// 像素
public static float MillimeterToPixelSingle(float mm, int paperZoom)
{
if (0 < paperZoom)
{
decimal pixel = System.Convert.ToDecimal(mm) /
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) *
System.Convert.ToDecimal(DPI) *
System.Convert.ToDecimal(paperZoom) / 100m;
return System.Convert.ToSingle(pixel);
}
else
{
return 0f;
}
}
///
/// 像素转换为毫米
///
///
/// 表示倍率 100%
///
/// 像素
/// 毫米
public static float PixelToMillimeter(int pixel)
{
decimal mm = System.Convert.ToDecimal(pixel) *
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) /
System.Convert.ToDecimal(DPI);
return System.Convert.ToSingle(mm);
}
///
/// 像素转换为毫米
///
/// 像素
/// 表示倍率%
/// 毫米
public static float PixelToMillimeter(int pixel, int paperZoom)
{
if (0 < paperZoom)
{
decimal mm = System.Convert.ToDecimal(pixel) *
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) /
System.Convert.ToDecimal(DPI) /
System.Convert.ToDecimal(paperZoom) * 100m;
return System.Convert.ToSingle(mm);
}
else
{
return 0f;
}
}
///
/// 像素转换为毫米
///
/// 像素
/// 表示倍率%
/// DPI
/// 毫米
public static float PixelToMillimeter(int pixel, int paperZoom, float dpi)
{
if (0 < paperZoom)
{
decimal mm = System.Convert.ToDecimal(pixel) *
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) /
System.Convert.ToDecimal(dpi) /
System.Convert.ToDecimal(paperZoom) * 100m;
return System.Convert.ToSingle(mm);
}
else
{
return 0f;
}
}
///
/// 像素转换为毫米
///
/// 像素
/// 表示倍率%
/// 毫米
public static float PixelToMillimeter(int pixel, double paperZoom)
{
if (0 < paperZoom)
{
decimal mm = System.Convert.ToDecimal(pixel) *
System.Convert.ToDecimal(LayoutConsts.MILLIMETER_PER_INCH) /
System.Convert.ToDecimal(DPI) /
System.Convert.ToDecimal(paperZoom);
return System.Convert.ToSingle(mm);
}
else
{
return 0f;
}
}
///
/// 截断到指定的精度。
///
/// 截断的目标
/// 精度
/// 截断后的数值
public static float Truncate(float value, int digits)
{
double v = Math.Pow(10, digits);
return Convert.ToSingle(Math.Truncate((double)value * v) / v);
}
///
/// 截断到指定的精度。
///
/// 截断的目标
/// 精度
/// 截断后的数值
public static decimal Truncate(decimal value, int digits)
{
decimal v = (decimal)Math.Pow(10, digits);
return Math.Truncate(value * v) / v;
}
/////
///// 全角字符尺寸
/////
///// 字体
///// 全角字符尺寸
//public static SizeF GetMaxSizeF(Font font)
//{
// return _graphics.MeasureString(LayoutConsts.FULLSHAPE_TEXT,
// font, PointF.Empty, _stringFormatHorizontal);
//}
/////
///// 文字间隔计算
/////
///// 宽
///// 文字个数
///// 字体
///// 文字间隔
//public static float EqualityChars(float width, int charCount, Font font)
//{
// SizeF maxSizeF = GetMaxSizeF(font);
// double equalityCharSpace;
// if (1 < charCount)
// {
// equalityCharSpace =
// ((width
// - LayoutConsts.TEXT_MARGIN
// - LayoutConsts.TEXT_MARGIN
// - maxSizeF.Width)
// / (charCount - 1))
// - maxSizeF.Width;
// }
// else
// {
// equalityCharSpace = 0;
// }
// return (float)equalityCharSpace;
//}
/////
///// 文字间隔计算
/////
///// 宽
///// 文字个数
///// 字体
///// 文字间隔
//public static decimal EqualityChars(decimal width, decimal charCount, Font font)
//{
// SizeF sizef = GetMaxSizeF(font);
// decimal equalityCharSpace;
// if (1 < charCount)
// {
// equalityCharSpace =
// ((width
// - System.Convert.ToDecimal(LayoutConsts.TEXT_MARGIN + LayoutConsts.TEXT_MARGIN)
// - System.Convert.ToDecimal(sizef.Width))
// / (charCount - 1))
// - System.Convert.ToDecimal(sizef.Width);
// }
// else
// {
// equalityCharSpace =
// (width
// - System.Convert.ToDecimal(LayoutConsts.TEXT_MARGIN + LayoutConsts.TEXT_MARGIN)
// - System.Convert.ToDecimal(sizef.Width));
// }
// if (equalityCharSpace < 0)
// {
// equalityCharSpace = 0;
// }
// return equalityCharSpace;
//}
#endregion 函数
}
}