using ComPDFKit.PDFDocument; using ComPDFKit.PDFWatermark; using ComPDFKit.Controls.Common; using ComPDFKit.Controls.Helper; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using static ComPDFKit.Controls.PDFControl.PageRangeDialog; using MessageBox = System.Windows.MessageBox; namespace ComPDFKit.Controls.PDFControl { /// /// Interaction logic for WatermarkDialog.xaml /// public partial class WatermarkDialog : Window, INotifyPropertyChanged { private bool _canChangeRange = false; public bool CanChangeRange { get => _canChangeRange; set => UpdateProper(ref _canChangeRange, value); } private C_Watermark_Type _watermarkType = C_Watermark_Type.WATERMARK_TYPE_TEXT; public C_Watermark_Type WatermarkType { get => _watermarkType; set { if (UpdateProper(ref _watermarkType, value)) { watermarkData.Type = _watermarkType; } } } private string _watermarkText = "Watermark"; public string WatermarkText { get => _watermarkText; set { if (UpdateProper(ref _watermarkText, value)) { watermarkData.Text = _watermarkText; } } } private byte[] _brush = new byte[] { 255, 0, 0 }; public byte[] Brush { get => _brush; set { if (UpdateProper(ref _brush, value)) { watermarkData.Color = _brush; } } } private int _selectedTag = 4; public int SelectedTag { get => _selectedTag; set { if (UpdateProper(ref _selectedTag, value)) { watermarkData.Align = _selectedTag; } } } private string _imagePath = ""; public string ImagePath { get => _imagePath; set { if (CommonHelper.IsImageCorrupted(value)) { return; } if (UpdateProper(ref _imagePath, value)) { watermarkData.ImagePath = _imagePath; } } } private string _imageScale = "100"; public string ImageScale { get => _imageScale; set { if (string.IsNullOrEmpty(value)) { return; } if (int.Parse(value) > ScaleNumericControl.Maximum) { value = ScaleNumericControl.Maximum.ToString(); } if (int.Parse(value) < ScaleNumericControl.Minimum) { value = ScaleNumericControl.Minimum.ToString(); } if (UpdateProper(ref _imageScale, value)) { watermarkData.ImageScale = int.Parse(_imageScale); } } } private WatermarkData watermarkData = new WatermarkData(); private string _fontName = "Helvetica"; public string FontName { get => _fontName; set { if (UpdateProper(ref _fontName, value)) { watermarkData.FontName = _fontName; } } } private string _textSize = "48"; public string TextSize { get => _textSize; set { if (UpdateProper(ref _textSize, value)) { watermarkData.FontSize = float.Parse(_textSize); } } } private bool _isFront = true; public bool IsFront { get => _isFront; set { if (UpdateProper(ref _isFront, value)) { watermarkData.IsFront = _isFront; } } } private bool _isFullScreen; public bool IsFullScreen { get => _isFullScreen; set { if (UpdateProper(ref _isFullScreen, value)) { watermarkData.IsFullScreen = _isFullScreen; } } } private int _rotation; public int Rotation { get => _rotation; set { if (UpdateProper(ref _rotation, value)) { watermarkData.Rotation = _rotation; } } } private byte _opacityValue = 255; public byte OpacityValue { get => _opacityValue; set { if (UpdateProper(ref _opacityValue, value)) { watermarkData.Opacity = _opacityValue; } } } private float _verticalSpacing; public float VerticalSpacing { get => _verticalSpacing; set { if (UpdateProper(ref _verticalSpacing, value)) { watermarkData.VerticalSpacing = _verticalSpacing; } } } private float _horizontalSpacing; public float HorizontalSpacing { get => _horizontalSpacing; set { if (UpdateProper(ref _horizontalSpacing, value)) { watermarkData.HorizontalSpacing = _horizontalSpacing; } } } private float _vertOffset; public float VertOffset { get => _vertOffset; set { if (UpdateProper(ref _vertOffset, value)) { watermarkData.VertOffset = _vertOffset; } } } private float _horizOffset; public float HorizOffset { get => _horizOffset; set { if (UpdateProper(ref _horizOffset, value)) { watermarkData.HorizOffset = _horizOffset; } } } private string _postScriptName; public string PostScriptName { get => _postScriptName; set { if (UpdateProper(ref _postScriptName, value)) { watermarkData.FontName = _postScriptName; } } } public delegate void WindowClosedEventHandler(object sender, WatermarkData watermarkData); public event WindowClosedEventHandler WindowClosed; private WeakReference weakReference; public WatermarkDialog() { DataContext = this; InitializeComponent(); Title = LanguageHelper.SecurityManager.GetString("Title_AddWatermark"); } public bool InitWithFileInfo(FileInfoWithRange fileInfo) { if (fileInfo == null) { return false; } InitPreviewControl(fileInfo); return true; } private void InitPreviewControl(FileInfoWithRange fileInfo) { PreviewControl.Document = fileInfo.Document; PreviewControl.MarkedPageList = fileInfo.PageRangeList; PreviewControl.PageRangeList = CommonHelper.GetDefaultPageList(PreviewControl.Document); } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } protected bool UpdateProper(ref T properValue, T newValue, [CallerMemberName] string properName = "") { if (object.Equals(properValue, newValue)) return false; properValue = newValue; OnPropertyChanged(properName); return true; } private void FontSizeCmb_SelectionChanged(object sender, SelectionChangedEventArgs e) { var item = sender as ComboBox; if (item != null) { TextSize = (item.SelectedItem as ComboBoxItem).Tag.ToString(); } } private void Window_Loaded(object sender, RoutedEventArgs eventArgs) { ColorPickerControl.SetIsChecked(1); InitWatermarkData(ref watermarkData); PreviewControl.WatermarkData = watermarkData; watermarkData.ValueChanged += (s, e) => PreviewControl.WatermarkData = watermarkData; weakReference = new WeakReference(this); FontFamilyCmb.ItemsSource = CPDFFont.GetFontNameDictionary().Keys; // If there is helvetica,arial,times, then select by default. if (FontFamilyCmb.Items.Contains("Helvetica")) { FontFamilyCmb.SelectedItem = "Helvetica"; } else if (FontFamilyCmb.Items.Contains("Arial")) { FontFamilyCmb.SelectedItem = "Arial"; } else if (FontFamilyCmb.Items.Contains("Times")) { FontFamilyCmb.SelectedItem = "Times"; } else { FontFamilyCmb.SelectedIndex = 0; } } private void InitWatermarkData(ref WatermarkData watermarkData) { watermarkData.Type = WatermarkType; watermarkData.Text = WatermarkText; watermarkData.FontName = FontName; watermarkData.FontSize = float.Parse(TextSize); watermarkData.Color = Brush; watermarkData.ImagePath = ImagePath; watermarkData.ImageScale = int.Parse(ImageScale); watermarkData.Rotation = Rotation; watermarkData.Opacity = OpacityValue; watermarkData.Align = SelectedTag; watermarkData.VertOffset = VertOffset; watermarkData.IsFront = IsFront; watermarkData.IsFullScreen = IsFullScreen; watermarkData.VerticalSpacing = VerticalSpacing; watermarkData.HorizontalSpacing = HorizontalSpacing; } private void ImagePathBtn_Click(object sender, RoutedEventArgs e) { string filePath = CommonHelper.GetExistedPathOrEmpty("image (*.jpg;*.png;*.bmp;*.jpeg;*.gif;*.tiff;)|*.jpg;*.png;*.bmp;*.jpeg;*.gif;*.tiff;"); if (!string.IsNullOrEmpty(filePath)) { ImagePath = filePath; } } private void CPDFOpacityControl_OpacityChanged(object sender, EventArgs e) { var opacityControl = sender as CPDFOpacityControl; if (opacityControl != null) { OpacityValue = (byte)(opacityControl.OpacityValue / 100.0 * 255.0); } } private void ColorPickerControl_ColorChanged(object sender, EventArgs e) { var colorPicker = sender as ColorPickerControl; if (colorPicker != null) { Brush = CommonHelper.ConvertBrushToByteArray(colorPicker.Brush); } } private void TypeRdo_Checked(object sender, RoutedEventArgs e) { var rdo = sender as RadioButton; if (rdo != null) { if (rdo.Name == "TextRdo") { WatermarkType = C_Watermark_Type.WATERMARK_TYPE_TEXT; } else if (rdo.Name == "ImageRdo") { WatermarkType = C_Watermark_Type.WATERMARK_TYPE_IMG; } else { watermarkData.Type = C_Watermark_Type.WATERMARK_TYPE_UNKNOWN; } } } private void CPDFRotationControl_RotationChanged(object sender, EventArgs e) { var rotationControl = sender as CPDFRotationControl; if (rotationControl != null) { Rotation = int.Parse(rotationControl.RotationText); } } private void CPDFTileControl_HorizontalSpacingChanged(object sender, EventArgs e) { var tileControl = sender as CPDFTileControl; if (tileControl != null) { HorizontalSpacing = float.Parse(tileControl.HorizontalSpacingValue); } } private void CPDFTileControl_VerticalSpacingChanged(object sender, EventArgs e) { var tileControl = sender as CPDFTileControl; if (tileControl != null) { VerticalSpacing = float.Parse(tileControl.VerticalSpacingValue); } } private void CPDFTileControl_FullScreenChanged(object sender, EventArgs e) { var tileControl = sender as CPDFTileControl; if (tileControl != null) { IsFullScreen = tileControl.IsFullScreen; } } private void CPDFLocationControl_HorizOffsetChanged(object sender, EventArgs e) { var locationControl = sender as CPDFLocationControl; if (locationControl != null) { HorizOffset = (float)(float.Parse(locationControl.HorizOffsetValue) / 25.4 * 72.0); } } private void CPDFLocationControl_VertOffsetChanged(object sender, EventArgs e) { var locationControl = sender as CPDFLocationControl; if (locationControl != null) { VertOffset = (float)(float.Parse(locationControl.VertOffsetValue) / 25.4 *72); } } private void ConfirmBtn_Click(object sender, RoutedEventArgs e) { if(watermarkData.Type == C_Watermark_Type.WATERMARK_TYPE_TEXT && string.IsNullOrEmpty(watermarkData.Text)) { MessageBox.Show(LanguageHelper.SecurityManager.GetString("Warn_EmptyWatermarkText"), "Warning", MessageBoxButton.OK); return; } if (watermarkData.Type == C_Watermark_Type.WATERMARK_TYPE_IMG && string.IsNullOrEmpty(watermarkData.ImagePath)) { MessageBox.Show(LanguageHelper.SecurityManager.GetString("Warn_EmptyWatermarkText"), "Warning", MessageBoxButton.OK); return; } this.Close(); WindowClosed?.Invoke(weakReference.Target, watermarkData); } private void CancelBtn_Click(object sender, RoutedEventArgs e) { this.Close(); } protected override void OnClosed(EventArgs e) { PreviewControl.DeleteDisplayWatermark(); base.OnClosed(e); } private void LocationRdo_Checked(object sender, RoutedEventArgs e) { var locationChk = sender as RadioButton; if (locationChk != null) { if (locationChk.Name == "FrontRdo") { IsFront = true; } else { IsFront = false; } } } private void FontFamilyCmb_SelectionChanged(object sender, SelectionChangedEventArgs e) { FontStyleCmb.ItemsSource = CPDFFont.GetFontNameDictionary()[FontFamilyCmb.SelectedItem.ToString()]; FontStyleCmb.SelectedIndex = 0; string postScriptName = string.Empty; CPDFFont.GetPostScriptName(FontFamilyCmb.SelectedItem.ToString(), FontStyleCmb?.SelectedItem?.ToString(), ref postScriptName); PostScriptName = postScriptName; } private void FontStyleCmb_SelectionChanged(object sender, SelectionChangedEventArgs e) { string postScriptName = string.Empty; CPDFFont.GetPostScriptName(FontFamilyCmb.SelectedValue.ToString(), FontStyleCmb.SelectedValue?.ToString(), ref postScriptName); PostScriptName = postScriptName; } } }