From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.Share.Windows/Report/PrintGdiPlus.cs |  265 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 265 insertions(+), 0 deletions(-)

diff --git a/HotelPms.Share.Windows/Report/PrintGdiPlus.cs b/HotelPms.Share.Windows/Report/PrintGdiPlus.cs
new file mode 100644
index 0000000..bb1b745
--- /dev/null
+++ b/HotelPms.Share.Windows/Report/PrintGdiPlus.cs
@@ -0,0 +1,265 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing.Printing;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using Microsoft.Win32;
+using System.IO;
+
+namespace HotelPms.Share.Windows.Report
+{
+    /// <summary>										
+    /// ****************************** Description *******************************										
+    /// ◇システム名称										
+    ///  @CoreCom										
+    /// ◇概要										
+    ///  施設設定画面										
+    /// ◇履歴										
+    ///  2007/11/02 小木 勝龍  新規作成										
+    /// ****************************** Declarations ******************************										
+    /// </summary>										
+    public abstract class PrintGdiPlus : ReportBase,IDisposable
+    {
+        #region  ★★★★★ Declartions ★★★★★
+
+        public static SortedDictionary<string, string> FontFileDict = null;
+        public static string SystemFontPath = string.Empty;
+
+        public delegate void FetchEventHandler(object sender, FetchEventArgs e);
+        public event FetchEventHandler FetchItem = null;
+
+        private bool m_Disposed = false;
+
+        protected StringFormat m_StringFormat = new StringFormat();
+        protected float m_PrintRate = 1F;  //印字倍率        
+        
+        protected static int A4PaperWidth = 827;
+        protected static int A4PaperHeight = 1169;
+
+        protected static int B5PaperWidth = 717;
+        protected static int B5PaperHeight = 1012;
+
+        #endregion
+
+        #region  ★★★★★ Property ★★★★★
+
+        protected List<Cell> m_Items = new List<Cell>();
+        public List<Cell> Items
+        {
+            get { return m_Items; }
+        }
+
+        protected PrintDocument m_PrintDoc = new PrintDocument();
+
+        public PrintDocument PrintDoc
+        {
+            get { return m_PrintDoc; }
+            set { m_PrintDoc = value; }
+        }
+
+        /// <summary>
+        /// 印字範囲
+        /// </summary>
+        public float PaperSizeRate { get; set; } = 0.95F;
+
+        #endregion
+
+        #region  ★★★★★ Class Event ★★★★★
+
+        public PrintGdiPlus()
+        {
+            m_PrintDoc.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
+            SystemFontPath = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
+            if (FontFileDict == null) { FontFileDict = ReadFontInformation(); }
+            m_StringFormat.FormatFlags |= StringFormatFlags.NoWrap;
+        }
+
+        ~PrintGdiPlus()
+        {
+            Dispose(false);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!m_Disposed)   //一回だけ
+            {
+                if (disposing)
+                {
+                    //Managed Resources
+                    if (m_StringFormat != null) { m_StringFormat.Dispose(); m_StringFormat = null; }
+                }
+
+                //Unmanaged resources
+                m_Disposed = true;
+            }
+        }
+
+        public virtual void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        #endregion
+
+        #region  ★★★★★ Control Event ★★★★★
+        #endregion
+
+        #region  ★★★★★ Private Function ★★★★★
+        #endregion
+
+        #region  ★★★★★ Public  Function ★★★★★
+
+        public void Clear()
+        {
+            m_Items.Clear();
+        }
+
+        public void Add(Cell cell)
+        {
+            m_Items.Add(cell);
+        }
+
+
+
+        public void PrintAll(Graphics g)
+        {
+            int i = 0;
+            int count = m_Items.Count;
+            foreach (Cell item in m_Items) 
+            {
+                if (FetchItem != null) { FetchItem(this, new FetchEventArgs(item, i, count)); }
+                DrawCell(g, item);
+                i++;
+            }
+        }
+
+        public void DrawBorder(Graphics g, Border border, Cell item)
+        {
+            if (!border.Visible) { return; }
+
+            using (Pen pen = new Pen(Brushes.Black, border.Weight))
+            {
+                pen.DashStyle = border.DashStyle;
+
+                float x1 = 0F;
+                float y1 = 0F;
+                float x2 = 0F;
+                float y2 = 0F;
+
+                if (border.Index == Border.TypeIndex.Top)
+                {
+                    x1 = item.Style.Left - border.Weight * 0.5F;
+                    x2 = item.Style.Left + item.Style.Width + border.Weight * 0.5F;
+                    y1 = y2 = item.Style.Top;
+                }
+                else if (border.Index == Border.TypeIndex.Bottom)
+                {
+                    x1 = item.Style.Left - border.Weight * 0.5F;
+                    x2 = item.Style.Left + item.Style.Width + border.Weight * 0.5F;
+                    y1 = y2 = item.Style.Top + item.Style.Height;
+                }
+                else if (border.Index == Border.TypeIndex.Left)
+                {
+                    x1 = x2 = item.Style.Left;
+                    y1 = item.Style.Top;
+                    y2 = item.Style.Top + item.Style.Height;
+                }
+                else if (border.Index == Border.TypeIndex.Right)
+                {
+                    x1 = x2 = item.Style.Left + item.Style.Width;
+                    y1 = item.Style.Top;
+                    y2 = item.Style.Top + item.Style.Height;
+                }
+
+                g.DrawLine(pen, x1, y1, x2, y2);
+            }
+        }
+
+        public void DrawCell(Graphics g, Cell item)
+        {
+            if (item.CellType == Cell.CellKind.Text || item.CellType == Cell.CellKind.PrintTime || item.CellType == Cell.CellKind.PageNo || item.CellType == Cell.CellKind.TimeAndPage)
+            {
+                //枠
+                foreach (Border border in item.Style.BorderList) { DrawBorder(g, border, item); }
+
+                RectangleF r = new RectangleF(item.Style.Left + item.Style.Padding.Left, item.Style.Top + item.Style.Padding.Top, item.Style.Width - item.Style.Padding.Left - item.Style.Padding.Right, item.Style.Height - item.Style.Padding.Top - item.Style.Padding.Bottom);
+                m_StringFormat.Alignment = item.Style.Alignment;
+                m_StringFormat.LineAlignment = item.Style.LineAlignment;
+
+                string text = item.Text;
+                if(item.CellType == Cell.CellKind.PrintTime)
+                {
+                    text = item.Style.Template.Length > 0 ? string.Format(item.Style.Template, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")) : DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
+                }
+                else if (item.CellType == Cell.CellKind.PageNo)
+                {
+                    text = item.Style.Template.Length > 0 ? string.Format(item.Style.Template, m_PageIndex, m_PageCount) : $"{m_PageIndex} / {m_PageCount.ToString().PadLeft(5, ' ')}";
+                }
+                else if (item.CellType == Cell.CellKind.TimeAndPage)
+                {
+                    text = item.Style.Template.Length > 0 ? string.Format(item.Style.Template, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), m_PageIndex, m_PageCount) : $"{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")} {m_PageIndex} / {m_PageCount.ToString().PadLeft(5, ' ')}";
+                }
+
+                g.DrawString(text, item.Style.Font, Brushes.Black, r, m_StringFormat);
+            }
+            else if (item.CellType == Cell.CellKind.DotLine || item.CellType == Cell.CellKind.Line)
+            {
+                using (Pen pen = new Pen(Brushes.Black, 1))
+                {
+                    pen.DashStyle = (item.CellType == Cell.CellKind.DotLine) ? DashStyle.Dot : DashStyle.Solid;
+                    g.DrawLine(pen, item.Style.Left, item.Style.Top, item.Style.Left + item.Style.Width, item.Style.Top + item.Style.Height);
+                }
+            }
+            else if (item.CellType == Cell.CellKind.Image)
+            {
+                if (System.IO.File.Exists(item.Text))
+                {
+                    using (System.Drawing.Image img = System.Drawing.Image.FromFile(item.Text))
+                    {
+                        DrawImage(g, img, item.Style.RectangleF);
+                        g.DrawRectangle(Pens.Black, item.Style.RectangleF.X, item.Style.RectangleF.Y, item.Style.RectangleF.Width, item.Style.RectangleF.Height);
+                    }
+                }
+            }
+        }
+
+        public void Output()
+        {            
+            m_PrintDoc.Print();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="graphics"></param>
+        /// <param name="image"></param>
+        /// <param name="rectangle"></param>
+        public void DrawImage(Graphics graphics, Image image, RectangleF rectangle)
+        {
+            if (graphics == null) throw new ArgumentNullException();
+            if (rectangle.Width <= 0 || rectangle.Height <= 0) throw new ArgumentOutOfRangeException();
+            if (image == null) return;
+
+            var l = rectangle.Left;
+            var t = rectangle.Top;
+            var w = (float)image.Width;
+            var h = (float)image.Height;
+            var r = h / w;
+            w = rectangle.Height / r;
+            h = rectangle.Height;
+            if (w > rectangle.Width)
+            {
+                w = rectangle.Width;
+                h = rectangle.Width * r;
+            }
+            l += (rectangle.Width - w) / 2;
+            t += (rectangle.Height - h) / 2;
+            graphics.DrawImage(image, l, t, w, h);
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.10.0