using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; namespace PDFSettings { internal class Helpers { /// /// 当前系统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 Helpers() { 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(standRect.Left * 72D / 96D, standRect.Top * 72D / 96D, standRect.Width * 72D / 96D, 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)); } /// /// 当前点转换成标准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)); } } }