RadFixedDocument rotate single page

3 posts, 1 answers
  1. Andri
    Andri avatar
    2 posts
    Member since:
    May 2019

    Posted 05 Aug Link to this post

    Hi,
    The rotation property of the page object causes me problems.
    I want to rotate a specific page in the RadFixedDocument, so i index the right page and rotate it 90 degree and after that i call OnPropertyChanged to update the PdfDocument property.
    But when the page was rotated(in the debug mode the value has been changed) the radpdfviewer doesn't display the rotation.

    Where could the error be located?
    Many thanks in advance for youre suggestions.

    MainWindow.xaml.cs:

    01.using System;
    02.using System.IO;
    03.using System.Linq;
    04.using System.Windows;
    05.using System.Windows.Input;
    06.using Telerik.Windows.Documents.Fixed;
    07.using Telerik.Windows.Documents.Fixed.FormatProviders;
    08.using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf;
    09.using Telerik.Windows.Documents.Fixed.Model;
    10.using Telerik.Windows.Documents.UI;
    11.using Rotation = Telerik.Windows.Documents.Fixed.Model.Data.Rotation;
    12. 
    13.namespace TelerikWpfApp1
    14.{
    15.    /// <summary>
    16.    /// Interaction logic for MainWindow.xaml
    17.    /// </summary>
    18.    public partial class MainWindow : Window
    19.    {
    20.        private PdfViewModel _pdfViewModel;
    21.        public MainWindow()
    22.        {
    23.            InitializeComponent();
    24.            _pdfViewModel = new PdfViewModel();
    25.            DataContext = _pdfViewModel;
    26.        }
    27. 
    28.        private void RotateSpecificPage(object sender, RoutedEventArgs e)
    29.        {
    30.            _pdfViewModel.RotateSpecificPage();
    31.        }
    32. 
    33.        private void DeleteSpecificPage(object sender, RoutedEventArgs e)
    34.        {
    35.            _pdfViewModel.DeleteSpecificPage();
    36.        }
    37.    }
    38.}

    MainWindow.xaml:

    01.<Window
    02.                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    03.                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    04.                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    05.                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    06.                xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
    07.                xmlns:converters="clr-namespace:Telerik.Windows.Documents.Converters;assembly=Telerik.Windows.Controls.FixedDocumentViewers"
    08.                xmlns:telerikWpfApp1="clr-namespace:TelerikWpfApp1"
    09.                mc:Ignorable="d"
    10.                x:Class="TelerikWpfApp1.MainWindow"
    11.                Title="MainWindow" Height="Auto" Width="Auto">
    12.    <Grid>
    13.        <Grid>
    14.            <Grid.RowDefinitions>
    15.                <RowDefinition Height="Auto" />
    16.                <RowDefinition Height="Auto" />
    17.                <RowDefinition Height="*" />
    18.            </Grid.RowDefinitions>
    19.            <Button Grid.Row="0" Click="RotateSpecificPage">RotatePage</Button>
    20.            <Button Grid.Row="1" Click="DeleteSpecificPage">DeletePage</Button>
    21.            <telerik:RadPdfViewer Grid.Row="2" x:Name="PdfViewer" Document="{Binding Path=PdfDocument, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/>
    22.        </Grid>
    23.    </Grid>
    24.</Window>

    PdfViewModel.cs:

    01.using System;
    02.using System.Collections.Generic;
    03.using System.ComponentModel;
    04.using System.IO;
    05.using System.Linq;
    06.using System.Runtime.CompilerServices;
    07.using System.Text;
    08.using System.Threading.Tasks;
    09.using System.Windows;
    10.using System.Windows.Input;
    11.using Telerik.Windows.Documents.Fixed.FormatProviders;
    12.using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf;
    13.using Telerik.Windows.Documents.Fixed.Model;
    14.using Telerik.Windows.Documents.Fixed.Model.Data;
    15.using TelerikWpfApp1.Annotations;
    16. 
    17.namespace TelerikWpfApp1
    18.{
    19.    public class PdfViewModel : INotifyPropertyChanged
    20.    {
    21.        private string _path = @"test.pdf";
    22.        private RadFixedDocument _pdfDocument;
    23.        private const int PageNumber = 0;
    24. 
    25.        public PdfViewModel()
    26.        {
    27.            PdfDocument = ReadPdf(_pathOne);
    28.        }
    29.        public RadFixedDocument PdfDocument
    30.        {
    31.            get => _pdfDocument;
    32.            set
    33.            {
    34.                if (!Equals(value, null))
    35.                {
    36.                    _pdfDocument = value;
    37.                    OnPropertyChanged();
    38.                }
    39.            }
    40.        }
    41. 
    42.        private RadFixedDocument ReadPdf(string path)
    43.        {
    44.            using (var stream = File.OpenRead(path))
    45.            {
    46.                return new PdfFormatProvider(stream, FormatProviderSettings.ReadAllAtOnce).Import();
    47.            }
    48.        }
    49. 
    50.        public void RotateSpecificPage()
    51.        {
    52.            Console.WriteLine(@"Page has been rotated");
    53.            if (!Equals(PdfDocument, null))
    54.            {
    55.                PdfDocument.Pages[PageNumber].Rotation = Rotation.Rotate90;
    56.                OnPropertyChanged(nameof(PdfDocument));
    57.            }
    58.        }
    59. 
    60.        public void DeleteSpecificPage()
    61.        {
    62.            Console.WriteLine(@"Page has been deleted");
    63.            if (!Equals(PdfDocument, null) && PdfDocument.Pages.Count > 1)
    64.            {
    65.                PdfDocument.Pages.RemoveAt(PageNumber);
    66.                OnPropertyChanged(nameof(PdfDocument));
    67.            }
    68.        }
    69. 
    70.        public event PropertyChangedEventHandler PropertyChanged;
    71. 
    72.        [NotifyPropertyChangedInvocator]
    73.        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    74.        {
    75.            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    76.        }
    77.    }
    78.}
  2. Answer
    Nikolay Demirev
    Admin
    Nikolay Demirev avatar
    176 posts

    Posted 08 Aug Link to this post

    Hi Andri,

    The RadPdfViewer does not respect the page orientation property if it is changed after importing the document. The PdfViewer provides an API for rotating all the pages in the document, but not a single one, so in order to rotate a single page I could suggest you import the document using RadPdfProcessing then rotate the page and export if, after that to import the document in the viewer. I have attached a sample project using your code with some changes showing how to rotate a single page.

    Here you can find more information about the RadPdfProcessing library: https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview

    Regards,
    Nikolay Demirev
    Progress Telerik
    Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
  3. Andri
    Andri avatar
    2 posts
    Member since:
    May 2019

    Posted 09 Aug in reply to Nikolay Demirev Link to this post

    Hi Nikolay,

    Thank you for youre response.
    I was able to implement the rotation.
    Andri

Back to Top