using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows; namespace PDF_Office.Helper { internal class DpiHelpers { /// /// 当前系统DPI /// public static int Dpi { get; private set; } /// /// 当前DPI相对系统标准DPI(96)缩小比例 /// public static float ScaleDpi { get { return (96F / Dpi); } } /// /// 系统DPI相对PDF文档DPI放大倍数 /// public static double ScaleFactor { get { return (Dpi / 72D); } } /// /// PDF文档DPI相对系统标准DPI(96)缩小倍数 /// public static double InvertScaleFactor { get { return (72D / Dpi); } } static DpiHelpers() { try { var flags = BindingFlags.NonPublic | BindingFlags.Static; var dpiProperty = typeof(SystemParameters).GetProperty("Dpi", flags); Dpi = (int)dpiProperty.GetValue(null, null); } catch { } } /// /// 从WPF获取的数值转换成标准DPI时的大小 /// 缩小 /// /// 当前数值 /// public static int GetDpiUnrelatedNum(int oldValue) { return (int)(oldValue * ScaleDpi); } /// /// 从WPF获取的数值转换成标准DPI时的大小 /// 缩小 /// /// 当前数值 /// public static double GetDpiUnrelatedNum(double oldValue) { return (double)(oldValue * ScaleDpi); } /// /// 标准DPI时的大小转换成当前DPI对应大小 /// 放大 /// /// 当前数值 /// public static double GetDpiRelatedNum(double oldValue) { return (oldValue / ScaleDpi); } /// /// 当前矩形换成标准DPI时的大小 /// /// /// public static Rect GetDpiUnrelatedRect(Rect oldValue) { return new Rect(GetDpiUnrelatedNum(oldValue.Left), GetDpiUnrelatedNum(oldValue.Top), GetDpiUnrelatedNum(oldValue.Width), GetDpiUnrelatedNum(oldValue.Height)); } /// /// 转换到PDF矩形 /// /// /// public static Rect GetRawRect(Rect oldValue) { Rect standRect = new Rect(GetDpiUnrelatedNum(oldValue.Left), GetDpiUnrelatedNum(oldValue.Top), GetDpiUnrelatedNum(oldValue.Width), GetDpiUnrelatedNum(oldValue.Height)); return new Rect((int)(standRect.Left * 72D / 96D), (int)(standRect.Top * 72D / 96D), (int)(standRect.Width * 72D / 96D), (int)(standRect.Height * 72D / 96D)); } /// /// 当前矩形换成当前DPI时的矩形大小 /// /// /// public static Rect GetDpiRelatedRect(Rect oldValue) { return new Rect(GetDpiRelatedNum(oldValue.Left), GetDpiRelatedNum(oldValue.Top), GetDpiRelatedNum(oldValue.Width), GetDpiRelatedNum(oldValue.Height)); } /// /// 将PDF矩形,转换为当前DPI时的矩形大小 /// /// /// public static Rect GetRawRelatedRect(Rect standRect) { Rect newRect = new Rect(standRect.Left / 72D *96D, standRect.Top / 72D * 96D, standRect.Width / 72D * 96D, standRect.Height / 72D * 96D); return GetDpiRelatedRect(newRect); } /// /// 当前点转换成标准DPI时的大小 /// /// /// public static Point GetDpiUnrelatedPoint(Point oldValue) { return new Point(GetDpiUnrelatedNum(oldValue.X), GetDpiUnrelatedNum(oldValue.Y)); } /// /// 点换成当前DPI时的大小 /// /// /// public static Point GetDpiRelatedPoint(Point oldValue) { return new Point(GetDpiRelatedNum(oldValue.X), GetDpiRelatedNum(oldValue.Y)); } /// /// 当前Size转换成标准DPI时的大小 /// /// /// public static Size GetDpiUnrelatedSize(Size oldValue) { return new Size(GetDpiUnrelatedNum(oldValue.Width), GetDpiUnrelatedNum(oldValue.Height)); } /// /// Size换成当前DPI时的大小 /// /// /// public static Size GetDpiRelatedSize(Size oldValue) { return new Size(GetDpiRelatedNum(oldValue.Width), GetDpiRelatedNum(oldValue.Height)); } } }