using ComPDFKit.PDFDocument; using ComPDFKit.PDFPage; using ComPDFKitViewer.PdfViewer; using PDF_Office.EventAggregators; using PDF_Office.Helper; using PDF_Office.Model; using PDF_Office.Model.EditTools.Background; using PDF_Office.Model.EditTools.Watermark; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace PDF_Office.ViewModels.EditTools.Background { public class BackgroundCreateFileContentViewModel : BindableBase, INavigationAware { IEventAggregator eventAggregator; public BackgroundInfo BackgroundInfo = new BackgroundInfo(); private CPDFViewer PDFViewer; private List _rotationList = new List(); public List RotationList { get { return _rotationList; } set { SetProperty(ref _rotationList, value); } } private List _opacityList = new List(); public List OpacityList { get { return _opacityList; } set { SetProperty(ref _opacityList, value); } } private List _relativeRatioList = new List(); public List RelativeRatioList { get { return _relativeRatioList; } set { SetProperty(ref _relativeRatioList, value); } } private int _rotationNumber = 0; public int RotationNumber { get { return _rotationNumber; } set { SetProperty(ref _rotationNumber, value); } } private int _opacityNumber = 100; public int OpacityNumber { get { return _opacityNumber; } set { SetProperty(ref _opacityNumber, value); } } private int _relativeRatioNumber = 0; public int RelativeRatioNumber { get { return _relativeRatioNumber; } set { SetProperty(ref _rotationNumber, value); } } private ObservableDictionary _getLocationFromNumber = new ObservableDictionary(); public ObservableDictionary GetLocationFromNumber { get { return _getLocationFromNumber; } } private string _fileNameText = ""; public string FileNameText { get { return _fileNameText; } set { SetProperty(ref _fileNameText, value); } } private bool isFirstEnter = true; public bool IsFirstEnter { get => isFirstEnter; set => isFirstEnter = value; } private Visibility _createModFileVisible = Visibility.Collapsed; public Visibility CreateModFileVisible { get => _createModFileVisible; set=>SetProperty(ref _createModFileVisible, value); } public DelegateCommand OpenFileCommand { get; set; } public DelegateCommand ChangeLocationCommand { get; set; } public BackgroundCreateFileContentViewModel(IEventAggregator eventAggregator) { this.eventAggregator = eventAggregator; ChangeLocationCommand = new DelegateCommand(ChangeLocation); InitComponent(); BackgroundInfo.BackgroundHorizalign = C_Background_Horizalign.BG_HORIZALIGN_CENTER; BackgroundInfo.BackgroundVertalign = C_Background_Vertalign.BG_VERTALIGN_CENTER; InitLocationButtonMatrix(); OpenFileCommand = new DelegateCommand(OpenFile); eventAggregator.GetEvent().Subscribe(ConfirmEditTools); } public string PageRangeText { get; set; } = "0"; private int _pageRangeSelectIndex = 0; public int PageRangeSelectIndex { get { return _pageRangeSelectIndex; } set { SetProperty(ref _pageRangeSelectIndex, value); EditToolsHelper.GetPageRange(PageRangeSelectIndex, PDFViewer.Document, ref BackgroundInfo.PageRange, PageRangeText); } } public void InitComponent() { InitOpacityList(); InitRotationList(); InitRelativeRatioList(); } private void InitRotationList() { OpacityList.Clear(); for (int defaultRotation = -45; defaultRotation <= 45; defaultRotation += 15) { RotationList.Add(defaultRotation.ToString()); } } private void InitOpacityList() { OpacityList.Clear(); for (int defaultOpacity = 10; defaultOpacity <= 100; defaultOpacity += 10) { OpacityList.Add(defaultOpacity.ToString() + " %"); } } private void InitRelativeRatioList() { RelativeRatioList.Clear(); for (int defaultRelativeRatioList = 10; defaultRelativeRatioList <= 100; defaultRelativeRatioList += 10) { RelativeRatioList.Add(defaultRelativeRatioList.ToString() + " %"); } } private void InitLocationButtonMatrix() { GetLocationFromNumber.Clear(); for (var temp = 0; temp <= 22; temp++) { GetLocationFromNumber.Add(temp.ToString(), true); if (temp % 10 == 2) { temp += 7; } } int Num = (int)BackgroundInfo.BackgroundVertalign * 10 + (int)BackgroundInfo.BackgroundHorizalign; GetLocationFromNumber[Num.ToString()] = false; } public void ConfirmEditTools(EnumColorOrFile enumColorOrFile) { if (enumColorOrFile == EnumColorOrFile.StatusFile) { eventAggregator.GetEvent().Publish(BackgroundInfo); } } public void ChangeLocation(object e) { string args = e as string; if (args != null) { BackgroundInfo.BackgroundVertalign = (C_Background_Vertalign)(int.Parse(args) / 10); BackgroundInfo.BackgroundHorizalign = (C_Background_Horizalign)(int.Parse(args) % 10); InitLocationButtonMatrix(); } } public void OpenFile() { System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog(); dlg.Multiselect = false; dlg.Filter = "PDF|*.png;*.jpg;*.pdf"; if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { FileNameText = dlg.SafeFileName; FileInfo file = new FileInfo(dlg.FileName); if (file.Extension == ".pdf") { GetBitmapFromDocment(dlg.FileName); } else { EditToolsHelper.ChooseFile(dlg.FileName, ref BackgroundInfo); } CreateModFileVisible = Visibility.Visible; } } public async void GetBitmapFromDocment(string filePath) { CPDFDocument document = CPDFDocument.InitWithFilePath(filePath); CPDFPage page = document.PageAtIndex(0); byte[] bmp_data = new byte[(int)page.PageSize.Width * (int)page.PageSize.Height * 4]; await Task.Run(delegate { page.RenderPageBitmap(0, 0, (int)page.PageSize.Width, (int)page.PageSize.Height, 0xffffffff, bmp_data, 1); }); BackgroundInfo.ImageArray = bmp_data; BackgroundInfo.ImageWidth = (int)page.PageSize.Width; BackgroundInfo.ImageHeight = (int)page.PageSize.Height; document.ReleasePages(); document.Release(); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out PDFViewer); InitOpacityList(); } } }