using System; using System.ComponentModel; using System.Xml.Serialization; using iTextSharp.text.pdf; using PDFPatcher.Common; namespace PDFPatcher.Model { [XmlRoot(Constants.Content.Page)] public class PageSettings { ///获取或指定页面范围的值。 [XmlAttribute(Constants.PageRange)] public string PageRange { get; set; } ///获取或指定页面筛选的值。 [XmlAttribute(Constants.PageFilterTypes.ThisName)] public string Filter { get; set; } ///获取或指定页面尺寸的值。 [XmlAttribute(Constants.Content.PageSettings.MediaBox)] public string PageSize { get; set; } ///获取或指定裁剪框的值。 [XmlAttribute(Constants.Content.PageSettings.CropBox)] public string CropBox { get; set; } ///获取或指定修剪框的值。 [XmlAttribute(Constants.Content.PageSettings.TrimBox)] public string TrimBox { get; set; } ///获取或指定艺术框的值。 [XmlAttribute(Constants.Content.PageSettings.ArtBox)] public string ArtBox { get; set; } ///获取或指定出血框的值。 [XmlAttribute(Constants.Content.PageSettings.BleedBox)] public string BleedBox { get; set; } ///获取或指定旋转角度的值。 [XmlAttribute(Constants.Content.PageSettings.Rotation)] [DefaultValue(0)] public int Rotation { get; set; } static internal PageSettings FromReader(PdfReader reader, int pageIndex, UnitConverter converter) { iTextSharp.text.Rectangle b; var s = new PageSettings(); b = reader.GetPageSize(pageIndex); s.PageSize = ConvertPageSize(b, converter); b = reader.GetCropBox(pageIndex); s.CropBox = (b != null) ? ConvertPageSize(b, converter) : null; b = reader.GetBoxSize(pageIndex, "trim"); s.TrimBox = (b != null) ? ConvertPageSize(b, converter) : null; b = reader.GetBoxSize(pageIndex, "art"); s.ArtBox = (b != null) ? ConvertPageSize(b, converter) : null; b = reader.GetBoxSize(pageIndex, "bleed"); s.BleedBox = (b != null) ? ConvertPageSize(b, converter) : null; s.Rotation = reader.GetPageRotation(pageIndex); return s; } private static string ConvertPageSize(iTextSharp.text.Rectangle b, UnitConverter converter) { var p = new string[4]; p[0] = converter.FromPoint(b.Left).ToText("0.###"); p[1] = converter.FromPoint(b.Bottom).ToText("0.###"); p[2] = converter.FromPoint(b.Right).ToText("0.###"); p[3] = converter.FromPoint(b.Top).ToText("0.###"); return String.Join(" ", p); } static internal bool HavingSameDimension(PageSettings s1, PageSettings s2) { if (s1 == null && s2 == null) { return true; } if (s1 == null || s2 == null) { return false; } return s1.Rotation == s2.Rotation && s1.PageSize == s2.PageSize && s1.CropBox == s2.CropBox && s1.TrimBox == s2.TrimBox && s1.BleedBox == s2.BleedBox && s1.ArtBox == s2.ArtBox; } internal void WriteXml(System.Xml.XmlWriter writer) { if (String.IsNullOrEmpty(PageRange)) { System.Diagnostics.Debug.WriteLine("Empty page range."); return; } writer.WriteAttributeString(Constants.PageRange, PageRange); writer.WriteAttributeString(Constants.Content.PageSettings.MediaBox, PageSize); if (CropBox != null) { writer.WriteAttributeString(Constants.Content.PageSettings.CropBox, CropBox); } if (TrimBox != null) { writer.WriteAttributeString(Constants.Content.PageSettings.TrimBox, TrimBox); } if (ArtBox != null) { writer.WriteAttributeString(Constants.Content.PageSettings.ArtBox, ArtBox); } if (BleedBox != null) { writer.WriteAttributeString(Constants.Content.PageSettings.BleedBox, BleedBox); } if (Rotation != 0) { writer.WriteAttributeString(Constants.Content.PageSettings.Rotation, Rotation.ToText()); } } } }