I found the solution. To solve this problem, we can use ScaleTransform class.
First: we must use this <ElementName.RenderTransform> <ScaleTransform ScaleX="{Binding}"/> <ElementName.RenderTransform/> in XAML.
For example:
<Grid x:Name="PrintPreview_Grid" Height="206" Width="398" Margin="1,0,1,0">
<Grid.RenderTransform>
<ScaleTransform ScaleX="{Binding}"/>
</Grid.RenderTransform>
</Grid>
Then I used the following code for printing:
private void PrintButton_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
switch (App.EnumLanguage)
{
//For left to right languages
case AllLanguage.English:
(PrintPreview_Grid.RenderTransform as ScaleTransform).ScaleX = 1;
break;
//For right to left languages
default:
(PrintPreview_Grid.RenderTransform as ScaleTransform).ScaleX = -1;
break;
}
PrintDialog PD = new PrintDialog();
var Printer = new LocalPrintServer().GetPrintQueues();
//We can change the name of the printer we want
var SelectedPrinter = Printer.FirstOrDefault(P => P.Name == "Microsoft Print to PDF");
PD.PrintQueue = SelectedPrinter;
var Size = new Size(PD.PrintableAreaHeight, PD.PrintableAreaWidth);
PrintPreview_Grid.Measure(Size);
PrintPreview_Grid.Arrange(new Rect(new Point(29, 0), Size));
PD.PrintVisual(PrintPreview_Grid, "Print");
//To return to the default state
(PrintPreview_Grid.RenderTransform as ScaleTransform).ScaleX = 1;
}
Result for left-to-right languages:
Result for right-to-left languages:
Thanks
