سوال

چرخش تصویر در WPF به کمک C#

بازدید349پست ها1آخرین فعالیت2 سال پیش
2
2

سلام
من یک پروژه دارم می نویسم انشاا... آخرهای پروژه است و در قسمتی از این پروژه می خوام از طریق یک چاپگر یک کارت عضویت چاپ کنم مشکلی با چاپ به زبان انگلیسی ندارم اما وقتی به زبان فارسی (که از راست به چپ است) می خوام کارت عضویت رو چاپ کنم نوشته ها به شکر زیر دیده می شوند:
https://docs.microsoft.com/en-us/answers/storage/attachments/126063-reverse-image.png
اما به وسیله یک برنامه ای مانند فوتوشاپ و یا برنامه ای که قابلیت چرخش افقی تصویر رو داره میشه این مشکل رو برطرف کرد و تصویر درست میشه مانند تصویر زیر:
https://docs.microsoft.com/en-us/answers/storage/attachments/126017-true-image.png
اما من می خوام این کار رو در سی شارپ انجام بدم یک الگوریتم یا روش انجام کار هم به ذهنم خورده شاید کمک کنه بهتون (چون متدی برای چرخش افقی پیدا نکردم) اونم اینکه اگر بتونیم X1,X2 و نیز Y1,Y2 قسمتی که می خواهیم چاپ بشه ، رو جابجا کنیم به نظرم این مشکل رفع میشه فقط دقت کنید این برنامه در WPF است نه Windows form.
این هم کدهای برنامه:
قسمت WPF:

            <GroupBox x:Name="PrintPreview_GroupBox" Header="Preview" Height="223" Width="400" Background="Transparent" HorizontalAlignment="Left" Visibility="Visible" Margin="14,228,0,14">
            </GroupBox>

قسمت سی شارپ:

        private void PrintButton_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            PrintDialog PD = new PrintDialog();
            var Printer = new LocalPrintServer().GetPrintQueues();
            var SelectedPrinter = Printer.FirstOrDefault(P => P.Name == "Software602 Print2PDF");
            PD.PrintQueue = SelectedPrinter;
            var Size = new Size(PD.PrintableAreaHeight, PD.PrintableAreaWidth);
            PrintPreview_GroupBox.Measure(Size);
            PrintPreview_GroupBox.Arrange(new Rect(new Point(0, 0), Size));
            PD.PrintVisual(PrintPreview_GroupBox, "Print");
        }

چند قسمت دیگه هم مشکل دارم که اگر کسی بتونه پاسخ درست بده مبلغی هم باهاشون توافق می کنم (چون احتمال میدم زمان زیادی ببره که خودم بتونم مشکلات رو رفع کنم دارم مشورت میگیرم چون این پروژه رو هرچه زودتر باید تحویل بدم)
با تشکر

سلام من جواب کامل و دقیق سوال خودم رو پیدا کردم (البته با کمک آقای اختیاری) و تو سایت docs.microsoft همراه با خروجی قرار دادم اما متاسفانه اینجا گزینه ای به نام "پاسخ شما به سوال" نداره (فکر کنم به خاطر اینکه خودم سوال پرسیدم) ممنون میشم راهنمایی کنید – رضا جافری 2 سال پیش
سلام آقای جافری وقت بخیر. توی ورژن فعلی برای جلوگیری از اشتباه کاربرای تازه وارد، کاربر نمیتونه تا وقتی اعتبارش زیر ۵۰ هست تو سوال خودش پاسخ ارسال بکنه. فعلا میتونید سوال رو ویرایش کنید و تو تیتر جداگونه پاسخ رو بنویسید. مچکرم – رضا رمضانپور 2 سال پیش

1 پاسخ

2

درود
من خودم برای چاپ Report یا همون گزارش از برنامه Stimulsoft Report استفاده میکنم که کاملا با دات نت هم خوانی داره و reference هم داره که داخل پروژه اضافه میشه دیگه درگیره این داستانا نمیشید. فقط کافیه داخل stimulsoft گزارشتون رو درست کنید اگه پارامتر نداره گزارشتون که مستقیم به پایگاه دادتون متصل میشه و اگه پارامتر داره که خیلی راحت میتونید از wpf به گزارشتون پارامتر بفرستید بعد یه خروجی فایل بهتون میده که اون فایل رو با شی Report که مال خود stimulsoft هست میتونید نمایش بدید. واقعا امکانات باورنکردنی داره این برنامه که من تا حالا ندیدم یه برنامه گزارش گیری انقدر کامل باشه. الان اکثر نرم افزارهای حسابداری هم از همین برنامه برای نمایش گزارش استفاده میکنن. اگه خواستید با این برنامه کار کنید میتونم کامل توضیح بدم که چه طور استفاده کنید. فقط اگه خواستید نصب کنید حتما نسخه 2017.1.3 رو نصب کنید نسخه های جدیدش کرک جالبی ندارن.
اما اگه میخوایین از همین روش خودتون استفاده کنین تو قسمت تعریف Groupbox این باعث میشه که Groupbox به اصطلاح flipX یا همون آینه بشه:

<GroupBox x:Name="PrintPreview_GroupBox" Header="Preview" Height="223" Width="400" Background="Transparent" HorizontalAlignment="Left" Visibility="Visible" Margin="14,228,0,14">
  <GroupBox.RenderTransform>
    <ScaleTransform ScaleX="-1" />
  </GroupBox.RenderTransform>
</GroupBox>
آخرین ویرایش: 25-08-2021 ???? 02:22، توسط عباس اختیاری
سلام الان من کد سی شارپ هم درست کردم از این ScaleTransform چون مقدارش متغیر برای انگلیسی باید 1 بشه و برای فارسی باید 1- بشه حالا مشکل اینجاست وقتی آینه میشه درست میشه اما از کادر میزنه بیرون – رضا جافری 2 سال پیش
که کدش اینطور میشه: ((ScaleTransform)PrintPreview_GroupBox.RenderTransform).ScaleX =- 1; البته اینجا برعکس نشون میده – رضا جافری 2 سال پیش
حالا یک روشی است که بیام Margin تک تک کنترل ها رو تغییر بدم ، که درست میشه و دوباره به کادر بر میگرده اما به نظر این روش معقولی نباشه – رضا جافری 2 سال پیش
کد حتماً باید داخل سی شارپ باشه چون کاربر زبان برنامه رو مشخص می کنه و بعید بدونم با XAML بشه این کارو کرد – رضا جافری 2 سال پیش
راجب stimulsoft که گفتید سعی می کنم 0 تا 100 برنامه رو خودم بنویسم اضافه بار نندازم رو برنامه و اینکه درگیر با کرک نشم و اینکه خیلی از این کامپوننت ها مشکل ظاهر دارند نمیشه ظاهرشون رو به هر زبانی که می خواهید تغییر داد – رضا جافری 2 سال پیش

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

این سوال حل نشده است!

این سوال هنوز حل نشده یا به پاسخ بهتری نیاز دارد. برای پاسخ به این سوال کافیست وارد حساب کاربری خود شوید.