using Microsoft.Win32;
|
using HotelPms.Share.Util;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
using System.Windows.Forms;
|
using HotelPms.Share.Windows.Util;
|
|
namespace HotelPms.Share.Windows.Report
|
{
|
public enum ReportType : int
|
{
|
Print = 0,
|
Pdf,
|
Xlsx,
|
Csv,
|
Html,
|
Json,
|
Xml,
|
Xls,
|
Preveiw,
|
}
|
|
#pragma warning disable CA1416
|
public abstract class ReportBase
|
{
|
protected float m_PrintWidth = 700F; // 印字使用幅(A4)
|
protected float m_PrintHeight = 1032F; // 印字使用高(A4)
|
|
protected float m_LeftMargins = 50F; //左余白
|
protected float m_TopMargins = 60F; //上余白
|
|
protected int m_PageCount = 0;
|
protected int m_PageIndex = 1;
|
protected int m_DataRowIndex = 0;
|
protected float m_DetailRowHeight = 0F;
|
protected float m_TitleHeight = 0F;
|
protected int m_DetailRowCount = 0;
|
protected float m_HeaderHeight = 0F;
|
protected float m_CaptionHeight = 0F; //項目名の固定行
|
protected float m_FooterHeight = 0F;
|
|
|
protected DataTable m_Data = null;
|
|
public DataTable Data
|
{
|
get { return m_Data; }
|
set { m_Data = value; }
|
}
|
|
protected GridStyle m_Style = null;
|
|
public GridStyle Style
|
{
|
get { return m_Style; }
|
set { m_Style = value; }
|
}
|
|
/// <summary>
|
/// 1/100 インチ ⇒ Point
|
/// </summary>
|
/// <param name="value"></param>
|
/// <returns></returns>
|
public float GetPointWithDisplay(float value)
|
{
|
return value * 0.72F;
|
}
|
|
public float GetTextHeight(Graphics g, Font font)
|
{
|
return g.MeasureString("A", font).Height;
|
}
|
|
public float GetTextWidth(Graphics g, Font font, string text)
|
{
|
return g.MeasureString(text, font).Width;
|
}
|
|
public static void CreateColumnStyle(DataGridView grid, GridStyle style)
|
{
|
style.ColumnStyle.Clear();
|
int total = 0;
|
int lastIdx = 0;
|
foreach (DataGridViewColumn col in grid.Columns)
|
{
|
if (!col.Visible || (col.CellType.Name != "DataGridViewTextBoxCell")) { continue; }
|
total += col.Width;
|
lastIdx = col.Index;
|
}
|
|
float rate = 0F;
|
foreach (DataGridViewColumn col in grid.Columns)
|
{
|
if (!col.Visible || (col.CellType.Name != "DataGridViewTextBoxCell")) { continue; }
|
|
ColumnStyle colStyle = new ColumnStyle();
|
colStyle.DefaultCellStyle = new CellStyle();
|
colStyle.WidthRate = lastIdx == col.Index ? (1.0F - rate) : (float)CConvert.Divide(col.Width * 1.0F, total, 2);
|
colStyle.Width = col.Width * 1.0F;
|
rate += colStyle.WidthRate;
|
colStyle.DataField = col.DataPropertyName.Length > 0 ? col.DataPropertyName : col.Name;
|
colStyle.Text = col.HeaderText;
|
colStyle.Alignment = GeneralSub.ToStringAlignment(grid.ColumnHeadersDefaultCellStyle.Alignment);
|
colStyle.LineAlignment = GeneralSub.ToLineStringAlignment(grid.ColumnHeadersDefaultCellStyle.Alignment);
|
colStyle.DefaultCellStyle.Alignment = GeneralSub.ToStringAlignment(col.DefaultCellStyle.Alignment);
|
colStyle.DefaultCellStyle.LineAlignment = GeneralSub.ToLineStringAlignment(col.DefaultCellStyle.Alignment);
|
colStyle.DefaultCellStyle.Font = col.DefaultCellStyle.Font;
|
colStyle.Font = grid.ColumnHeadersDefaultCellStyle.Font;
|
style.ColumnStyle.Add(colStyle);
|
}
|
}
|
|
public static SortedDictionary<string, string> ReadFontInformation()
|
{
|
var dictionary = new SortedDictionary<string, string>();
|
|
RegistryKey mykey = Registry.LocalMachine;
|
|
string key = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts";
|
using (RegistryKey regkey = mykey.OpenSubKey(key, false))
|
{
|
if (regkey != null)
|
{
|
//获取字体名
|
string[] mynames = regkey.GetValueNames();
|
|
foreach (string name in mynames)
|
{
|
//获取字体的文件名
|
string myvalue = regkey.GetValue(name).ToString();
|
|
if (myvalue.Substring(myvalue.Length - 4).ToUpper() == ".TTF" && myvalue.Substring(1, 2).ToUpper() != @":\")
|
{
|
string val = name.Substring(0, name.Length - 11);
|
dictionary[val] = myvalue;
|
}
|
}
|
regkey.Close();
|
}
|
}
|
return dictionary;
|
}
|
}
|
}
|