using ComPDFKit.PDFWatermark; using ComPDFKitViewer.PdfViewer; using Microsoft.Office.Interop.Word; using PDF_Master.EventAggregators; using PDF_Master.Helper; using PDF_Master.Model; using PDF_Master.Model.EditTools.Background; using PDF_Master.Model.EditTools.Bates; using PDF_Master.Model.EditTools.HeaderFooter; using PDF_Master.Model.EditTools.Watermark; using PDF_Master.Properties; using PDFSettings; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace PDF_Master.ViewModels.EditTools.HeaderFooter { public class HeaderFooterCreateContentViewModel : BindableBase, INavigationAware { private CPDFViewer PDFViewer; public HeaderFooterInfo HeaderFooterInfo = new HeaderFooterInfo(); public BatesHeaderFooterItem TemplateHeaderFooterItem; public enum EnumCreateOrEdit { None, StatusCreate, StatusEdit } private List _fontNameList = new List(); public List FontNameList { get { return _fontNameList; } set { SetProperty(ref _fontNameList, value); } } private void InitFontNameList() { FontNameList.Clear(); FontNameList.Add("Courier"); FontNameList.Add("Courier-Bold"); FontNameList.Add("Courier-Oblique"); FontNameList.Add("Courier-BoldOblique"); FontNameList.Add("Helvetica"); FontNameList.Add("Helvetica-Bold"); FontNameList.Add("Helvetica-Oblique"); FontNameList.Add("Helvetica-BoldOblique"); FontNameList.Add("Times-Roman"); FontNameList.Add("Times-Bold"); FontNameList.Add("Times-Italic"); FontNameList.Add("Times-BoldItalic"); } private int _fontNameSelectedIndex = 0; public int FontNameSelectedIndex { get { return _fontNameSelectedIndex; } set { SetProperty(ref _fontNameSelectedIndex, value); SetFontName(FontNameSelectedIndex); eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } private List _fontSizeList = new List(); public List FontSizeList { get { return _fontSizeList; } set { SetProperty(ref _fontSizeList, value); } } private void InitFontSizeList() { FontSizeList.Clear(); for (int temp = 10; temp <= 15; temp += 1) { FontSizeList.Add(temp.ToString() + "pt"); } } private int _fontSizeSelectedIndex = 0; public int FontSizeSelectedIndex { get { return _fontSizeSelectedIndex; } set { SetProperty(ref _fontSizeSelectedIndex, value); SetFontSize(FontSizeSelectedIndex); eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } private List _starPagetNumberList = new List(); public List StarPagetNumberList { get { return _starPagetNumberList; } set { SetProperty(ref _starPagetNumberList, value); } } private void InitStarPagetNumberList(int pageCount) { StarPagetNumberList.Clear(); for (int temp = 1; temp <= pageCount; temp += 1) { StarPagetNumberList.Add(temp.ToString()); } } private int _starPagetNumberIndex = 0; public int StarPagetNumberIndex { get { return _starPagetNumberIndex; } set { SetProperty(ref _starPagetNumberIndex, value); SetStarPagetNumber(StarPagetNumberIndex); eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } private List _pageNumberFormatList = new List(); public List PageNumberFormatList { get { return _pageNumberFormatList; } set { SetProperty(ref _pageNumberFormatList, value); } } private void InitPageNumberFormatList() { PageNumberFormatList.Clear(); PageNumberFormatList.Add("1"); PageNumberFormatList.Add("1 of n"); PageNumberFormatList.Add("1/n"); PageNumberFormatList.Add("Page 1"); PageNumberFormatList.Add("Page 1 of n"); } private int _pageNumberFormatIndex = 0; public int PageNumberFormatIndex { get { return _pageNumberFormatIndex; } set { SetProperty(ref _pageNumberFormatIndex, value); SetPageNumberFormat(PageNumberFormatIndex); } } private List _dateTimeFormatList = new List(); public List DateTimeFormatList { get { return _dateTimeFormatList; } set { SetProperty(ref _dateTimeFormatList, value); } } private void InitDateTimeFormatList() { DateTimeFormatList.Clear(); DateTimeFormatList.Add("m/d"); DateTimeFormatList.Add("m/d/yy"); DateTimeFormatList.Add("m/d/yyyy"); DateTimeFormatList.Add("mm/dd/yy"); DateTimeFormatList.Add("mm/dd/yyyy"); DateTimeFormatList.Add("d/m/yy"); DateTimeFormatList.Add("d/m/yyyy"); DateTimeFormatList.Add("dd/mm/yy"); DateTimeFormatList.Add("dd/mm/yyyy"); DateTimeFormatList.Add("mm/yy"); DateTimeFormatList.Add("mm/yyyy"); DateTimeFormatList.Add("m.d.yy"); DateTimeFormatList.Add("m.d.yyyy"); DateTimeFormatList.Add("mm.dd.yy"); DateTimeFormatList.Add("mm.dd.yyyy"); DateTimeFormatList.Add("mm.yy"); DateTimeFormatList.Add("mm.yyyy"); DateTimeFormatList.Add("d.m.yy"); DateTimeFormatList.Add("dd.mm.yy"); DateTimeFormatList.Add("dd.mm.yyyy"); DateTimeFormatList.Add("yy-mm-dd"); DateTimeFormatList.Add("yyyy-mm-dd"); } private int _dateTimeFormatIndex = 0; public int DateTimeFormatIndex { get { return _dateTimeFormatIndex; } set { SetProperty(ref _dateTimeFormatIndex, value); SetDateTimeFormat(DateTimeFormatIndex); } } private int maxPageRange = 0; public int MaxPageRange { get { return maxPageRange; } set { SetProperty(ref maxPageRange, value); } } public string _pageRangeText = "0"; public string PageRangeText { get { return _pageRangeText; } set { _pageRangeText = value; HeaderFooterInfo.PageRange = PageRangeText; eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } private int _pageRangeSelectIndex = 0; public int PageRangeSelectIndex { get { return _pageRangeSelectIndex; } set { SetProperty(ref _pageRangeSelectIndex, value); HeaderFooterInfo.PageRangeIndex = PageRangeSelectIndex; eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } private SolidColorBrush _solidColorBrush = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0x00, 0x00)); public SolidColorBrush SolidColorBrush { get { return _solidColorBrush; } set { SetProperty(ref _solidColorBrush, value); } } private Color _stringColor = Color.FromArgb(0xFF, 0xFF, 0x00, 0x00); public Color StringColor { get { return _stringColor; } set { SetProperty(ref _stringColor, value); SolidColorBrush = new SolidColorBrush(StringColor); for (int i = 0; i <= 5; i++) { HeaderFooterInfo.TextData[i].Color = EditToolsHelper.ConvertColor(value); } eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } private EnumCreateOrEdit _createOrEdit; public EnumCreateOrEdit CreateOrEdit { get { return _createOrEdit; } set { _createOrEdit = value; if (value == EnumCreateOrEdit.StatusEdit) { EditBaseVisible = Visibility.Visible; CreateBaseVisible = Visibility.Collapsed; } else if (value == EnumCreateOrEdit.StatusCreate) { CreateBaseVisible = Visibility.Visible; EditBaseVisible = Visibility.Collapsed; } } } private Visibility _createBaseVisible; public Visibility CreateBaseVisible { get => _createBaseVisible; set => SetProperty(ref _createBaseVisible, value); } private Visibility _editBaseVisible; public Visibility EditBaseVisible { get => _editBaseVisible; set => SetProperty(ref _editBaseVisible, value); } private string _marginTopValue = "3"; public string MarginTopValue { get { return _marginTopValue; } set { SetProperty(ref _marginTopValue, value); bool ValueEQ = true; if (HeaderFooterInfo.margin[1] == float.Parse(MarginTopValue)) { ValueEQ = false; } HeaderFooterInfo.margin[1] = float.Parse(MarginTopValue); if (ValueEQ) { eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } } private string _marginDownValue = "3"; public string MarginDownValue { get { return _marginDownValue; } set { SetProperty(ref _marginDownValue, value); bool ValueEQ = true; if (HeaderFooterInfo.margin[3] == float.Parse(MarginTopValue)) { ValueEQ = false; } HeaderFooterInfo.margin[3] = float.Parse(MarginDownValue); if (ValueEQ) { eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } } private string _marginLeftValue = "3"; public string MarginLeftValue { get { return _marginLeftValue; } set { SetProperty(ref _marginLeftValue, value); bool ValueEQ = true; if (HeaderFooterInfo.margin[0] == float.Parse(MarginTopValue)) { ValueEQ = false; } HeaderFooterInfo.margin[0] = float.Parse(MarginLeftValue); if (ValueEQ) { eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } } private string _marginRightValue = "3"; public string MarginRightValue { get { return _marginRightValue; } set { SetProperty(ref _marginRightValue, value); HeaderFooterInfo.margin[2] = float.Parse(MarginRightValue); eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } private string _textValue = ""; public string TextValue { get { return _textValue; } set { SetProperty(ref _textValue, value); } } public int GetLocationIndex = 0; private Dictionary _getTextValueFromNumber = new Dictionary(); public Dictionary GetTextValueFromNumber { get { return _getTextValueFromNumber; } set { _getTextValueFromNumber = value; } } public IEventAggregator eventAggregator; public DelegateCommand ChangeLocationCommand { get; set; } public DelegateCommand EnterTemplateListCommand { get; set; } public DelegateCommand SaveToTemplateListCommand { get; set; } public DelegateCommand SaveToCurrentTemplateListCommand { get; set; } public DelegateCommand SelectedColorChangedCommand { get; set; } public DelegateCommand TextValueChangedCommand { get; set; } public DelegateCommand ADDDateCommand { get; set; } public DelegateCommand ADDPagesCommand { get; set; } public string Unicode = null; public HeaderFooterCreateContentViewModel(IEventAggregator eventAggregator) { this.eventAggregator = eventAggregator; Unicode = App.mainWindowViewModel.SelectedItem.Unicode; for (int i = 0; i <= 5; i++) { HeaderFooterInfo.TextData[i].Color = EditToolsHelper.ConvertColor(Color.FromArgb(0xFF, 0xFF, 0x00, 0x00)); } InitList(); InitHeaderFooterInfo(); ChangeLocationCommand = new DelegateCommand(ChangeLocation); SelectedColorChangedCommand = new DelegateCommand(ChangedColor); EnterTemplateListCommand = new DelegateCommand(EnterTemplateList); SaveToTemplateListCommand = new DelegateCommand(SaveToTemplateList); SaveToCurrentTemplateListCommand = new DelegateCommand(SaveToCurrentTemplateList); TextValueChangedCommand = new DelegateCommand(TextValueChanged); ADDDateCommand = new DelegateCommand(ADDDate); ADDPagesCommand = new DelegateCommand(ADDPages); } private void InitList() { InitFontNameList(); InitFontSizeList(); InitDateTimeFormatList(); InitPageNumberFormatList(); InitLocationButtonMatrix(); } private void InitLocationButtonMatrix() { GetTextValueFromNumber.Clear(); for (var temp = 0; temp <= 5; temp++) { GetTextValueFromNumber.Add(temp.ToString(), ""); } } private void InitHeaderFooterInfo() { for (int i = 0; i <= 5; i++) { HeaderFooterInfo.TextData[i].text = GetTextValueFromNumber[i.ToString()]; } HeaderFooterInfo.margin[0] = float.Parse(MarginTopValue); HeaderFooterInfo.margin[1] = float.Parse(MarginRightValue); HeaderFooterInfo.margin[2] = float.Parse(MarginDownValue); HeaderFooterInfo.margin[3] = float.Parse(MarginLeftValue); SetFontName(FontNameSelectedIndex); SetFontSize(FontSizeSelectedIndex); SetDateTimeFormat(DateTimeFormatIndex); SetPageNumberFormat(PageNumberFormatIndex); SetStarPagetNumber(StarPagetNumberIndex); StringColor = Color.FromArgb(0xFF, 0xFF, 0x00, 0x00); } private void SetFontName(int Index) { for (int i = 0; i <= 5; i++) { HeaderFooterInfo.TextData[i].fontName = FontNameList[Index]; } } private void SetFontSize(int Index) { for (int i = 0; i <= 5; i++) { HeaderFooterInfo.TextData[i].fontSize = (Index + 7) * 1.33f; } } private void SetDateTimeFormat(int Index) { HeaderFooterInfo.DateTimeFormat = DateTimeFormatList[Index]; } private void SetPageNumberFormat(int Index) { HeaderFooterInfo.PageNumberFormat = PageNumberFormatList[Index]; } private void SetStarPagetNumber(int Index) { HeaderFooterInfo.StarPagetNumber = Index; } public void ChangeLocation(object e) { string args = e as string; if (args != null) { GetLocationIndex = int.Parse(args); TextValue = GetTextValueFromNumber[args]; } } private void ChangedColor(object obj) { if (obj != null) { var colorValue = (Color)obj; if (colorValue != null) { StringColor = colorValue; } } } public void EnterTemplateList() { this.eventAggregator.GetEvent().Publish(new EnumTemplateListOrCreateUnicode { Unicode = Unicode, Status = EnumTemplateListOrCreate.StatusTemplate }); } public void SaveToTemplateList() { SaveCurrentTemplate(); this.eventAggregator.GetEvent().Publish(new EnumTemplateListOrCreateUnicode { Unicode = Unicode, Status = EnumTemplateListOrCreate.StatusTemplate }); } public void SaveToCurrentTemplateList() { ConfirmEditBackgroundTemplateItem(); this.eventAggregator.GetEvent().Publish(new EnumTemplateListOrCreateUnicode { Unicode = Unicode, Status = EnumTemplateListOrCreate.StatusTemplate }); } private void TextValueChanged(object obj) { if (obj != null) { var textValue = obj as System.Windows.Controls.TextBox; if (textValue != null) { bool TextEQ = true; if (GetTextValueFromNumber[GetLocationIndex.ToString()] == textValue.Text) { TextEQ = false; } GetTextValueFromNumber[GetLocationIndex.ToString()] = textValue.Text; HeaderFooterInfo.TextData[GetLocationIndex].text = GetTextValueFromNumber[GetLocationIndex.ToString()]; if (TextEQ) { eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } } } } public void ADDDate() { GetTextValueFromNumber[GetLocationIndex.ToString()] = GetTextValueFromNumber[GetLocationIndex.ToString()] + "<<" + DateTimeFormatList[DateTimeFormatIndex] + ">>"; TextValue = GetTextValueFromNumber[GetLocationIndex.ToString()]; HeaderFooterInfo.TextData[GetLocationIndex].text = GetTextValueFromNumber[GetLocationIndex.ToString()]; eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } public void ADDPages() { GetTextValueFromNumber[GetLocationIndex.ToString()] = GetTextValueFromNumber[GetLocationIndex.ToString()] + "<<" + PageNumberFormatList[PageNumberFormatIndex].Replace("1", (StarPagetNumberIndex + 1).ToString()) + ">>"; TextValue = GetTextValueFromNumber[GetLocationIndex.ToString()]; HeaderFooterInfo.TextData[GetLocationIndex].text = GetTextValueFromNumber[GetLocationIndex.ToString()]; eventAggregator.GetEvent().Publish(new HeaderFooterInfoUnicode { Unicode = Unicode, Status = HeaderFooterInfo }); } public void ConvertInfoToItem(ref BatesHeaderFooterItem headerFooterItem, HeaderFooterInfo headerFooterInfo) { headerFooterItem.TextData = headerFooterInfo.TextData; headerFooterItem.ItemName = headerFooterInfo.ItemName; headerFooterItem.DateTimeFormat = headerFooterInfo.DateTimeFormat; headerFooterItem.StarPagetNumber = headerFooterInfo.StarPagetNumber; headerFooterItem.PageNumberFormat = headerFooterInfo.PageNumberFormat; headerFooterItem.margin = headerFooterInfo.margin; headerFooterItem.PageRange = PageRangeText; headerFooterItem.PageRangeIndex = headerFooterInfo.PageRangeIndex; } public void ConvertItemToInfo(BatesHeaderFooterItem headerFooterItem, ref HeaderFooterInfo headerFooterInfo) { headerFooterInfo.TextData = headerFooterItem.TextData; headerFooterInfo.ItemName = headerFooterItem.ItemName; headerFooterInfo.DateTimeFormat = headerFooterItem.DateTimeFormat; headerFooterInfo.StarPagetNumber = headerFooterItem.StarPagetNumber; headerFooterInfo.PageNumberFormat = headerFooterItem.PageNumberFormat; headerFooterInfo.margin = headerFooterItem.margin; headerFooterInfo.PageRangeIndex = headerFooterItem.PageRangeIndex; EditToolsHelper.GetPageRange(headerFooterInfo.PageRangeIndex, PDFViewer.Document, ref headerFooterInfo.PageRange, headerFooterItem.PageRange); } public void SaveCurrentTemplate() { var headerFooterItem = new BatesHeaderFooterItem(); ConvertInfoToItem(ref headerFooterItem, HeaderFooterInfo); headerFooterItem.ItemName += Settings.Default.HeaderFooterTemplateList.Count().ToString(); try { //创建缓存文件夹 string folderPath = Path.Combine(App.CurrentPath, "HeaderFooter"); //有可能因为其他原因存在同名文件,导致创建文件夹失败,需要先删除同名文件 //保险措施(猜测) if (File.Exists(folderPath)) { File.Delete(folderPath); } DirectoryInfo tempfolder = new DirectoryInfo(folderPath); if (!tempfolder.Exists) { tempfolder.Create(); } //预览图缓存 string saveName = Guid.NewGuid().ToString(); string savePath = Path.Combine(folderPath, saveName); Settings.Default.HeaderFooterTemplateList.Add(headerFooterItem); Settings.Default.Save(); } catch { } this.eventAggregator.GetEvent().Publish(new EnumTemplateListOrCreateUnicode { Unicode = Unicode, Status = EnumTemplateListOrCreate.StatusTemplate }); } public void ConfirmEditBackgroundTemplateItem() { var headerFooterItem = new BatesHeaderFooterItem(); ConvertInfoToItem(ref headerFooterItem, HeaderFooterInfo); try { //创建缓存文件夹 string folderPath = Path.Combine(App.CurrentPath, "Background"); //有可能因为其他原因存在同名文件,导致创建文件夹失败,需要先删除同名文件 //保险措施(猜测) if (File.Exists(folderPath)) { File.Delete(folderPath); } DirectoryInfo tempfolder = new DirectoryInfo(folderPath); if (!tempfolder.Exists) { tempfolder.Create(); } Settings.Default.HeaderFooterTemplateList[TemplateHeaderFooterItem.listIndex] = headerFooterItem; Settings.Default.Save(); } catch { } this.eventAggregator.GetEvent().Publish(new EnumTemplateListOrCreateUnicode { Unicode = Unicode, Status = EnumTemplateListOrCreate.StatusTemplate }); } public void InitComponentBySelectedInfo() { ConvertItemToInfo(TemplateHeaderFooterItem, ref HeaderFooterInfo); for (int i = 0; i <= 5; i++) { GetTextValueFromNumber[i.ToString()] = HeaderFooterInfo.TextData[i].text; } MarginTopValue = HeaderFooterInfo.margin[0].ToString(); MarginRightValue = HeaderFooterInfo.margin[1].ToString(); MarginDownValue = HeaderFooterInfo.margin[2].ToString(); MarginLeftValue = HeaderFooterInfo.margin[3].ToString(); DateTimeFormatIndex = DateTimeFormatList.IndexOf(HeaderFooterInfo.DateTimeFormat); PageNumberFormatIndex = PageNumberFormatList.IndexOf(HeaderFooterInfo.PageNumberFormat); FontNameSelectedIndex = FontNameList.IndexOf(HeaderFooterInfo.TextData[0].fontName); FontSizeSelectedIndex = FontSizeList.IndexOf(HeaderFooterInfo.TextData[0].fontSize.ToString()); StarPagetNumberIndex = StarPagetNumberList.IndexOf(HeaderFooterInfo.StarPagetNumber.ToString()); StringColor = EditToolsHelper.ConvertColor(HeaderFooterInfo.TextData[0].Color); SolidColorBrush = new SolidColorBrush(StringColor); PageRangeSelectIndex = HeaderFooterInfo.PageRangeIndex; if (HeaderFooterInfo.PageRangeIndex == 3) { PageRangeSelectIndex = 0; } } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out PDFViewer); MaxPageRange = PDFViewer.Document.PageCount; InitStarPagetNumberList(MaxPageRange); EditToolsHelper.GetPageRange(PageRangeSelectIndex, PDFViewer.Document, ref HeaderFooterInfo.PageRange, PageRangeText); if (navigationContext.Parameters.TryGetValue("HeaderFooterItem", out TemplateHeaderFooterItem)) { CreateOrEdit = EnumCreateOrEdit.StatusEdit; InitComponentBySelectedInfo(); } else { CreateOrEdit = EnumCreateOrEdit.StatusCreate; } StarPagetNumberIndex = 0; } } }