Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2019, 11:42   #1
mightyman
Новичок
Джуниор
 
Регистрация: 01.07.2019
Сообщений: 1
По умолчанию C# Печать формы с кастомным размером бумаги

Приветствую, фрумчане!

Сразу оговорюсь, что разработчиком не являюсь, так что просьба сдерживать ваш гнев праведный . Так или иначе понадобилось мне, для проверки некоторых нюансов работы ScrewDirevers, небольшая аппа могущая печать изображения на кастомного размера бумаге. Так как в годы лихой молодости интереcовался (совсем поверхностно) разработкой под .NetFramework, то решил для реализации использовать его, уж очень дружелюбен он к нубам. Взял пример с MSDN, слегка поправил и вот что получилось:

Код:
        public PrintDocument printDoc = new PrintDocument();
        .....
        private void PrintButton_Click(object sender, EventArgs e)
        {
            string FileName = "D:\\temp\\testprint.png";
            
            try
            {
                if (string.IsNullOrWhiteSpace(FileName)) return; // Prevents execution of below statements if filename is not selected.
 
                PrintDocument pd = new PrintDocument();
                PaperSize paperSize = new PaperSize("TEST PAPER SIZE", 50, 50);
                paperSize.RawKind = (int)PaperKind.Custom;
 
                //Disable the printing document pop-up dialog shown during printing.
                PrintController printController = new StandardPrintController();
                pd.PrintController = printController;
 
                //For testing only: Hardcoded set paper size to particular paper.
                pd.PrinterSettings.DefaultPageSettings.PaperSize = paperSize;
                pd.DefaultPageSettings.PaperSize = paperSize;
 
                pd.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
                pd.PrinterSettings.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
 
                pd.PrintPage += (sndr, args) =>
                {
                    System.Drawing.Image i = System.Drawing.Image.FromFile(FileName);
                    args.Graphics.PageUnit = System.Drawing.GraphicsUnit.Millimeter;
 
                    //Adjust the size of the image to the page to print the full image without loosing any part of the image.
                    System.Drawing.Rectangle m = args.MarginBounds;
 
                    //Logic below maintains Aspect Ratio.
                    if ((double)i.Width / (double)i.Height > (double)m.Width / (double)m.Height) // image is wider
                    {
                        m.Height = (int)((double)i.Height / (double)i.Width * (double)m.Width);
                    }
                    else
                    {
                        m.Width = (int)((double)i.Width / (double)i.Height * (double)m.Height);
                    }
                    //Calculating optimal orientation.
                    pd.DefaultPageSettings.Landscape = m.Width > m.Height;
                    //Putting image in center of page.
                    m.Y = (int)((((System.Drawing.Printing.PrintDocument)(sndr)).DefaultPageSettings.PaperSize.Height - m.Height) / 2);
                    m.X = (int)((((System.Drawing.Printing.PrintDocument)(sndr)).DefaultPageSettings.PaperSize.Width - m.Width) / 2);
                    args.Graphics.DrawImage(i, m);
                };
                
                pd.Print();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Создаем печатный документ, добавляем ему нужный размер бумаги, устанавливает отступы, загружаем изображение, скейлим его в соответствии с размером бумаги, печатаем на дефолтном принтере. Печатается, картинка скейлится, но вот сам лис не меняет размер на заданный и печатается в А4. Гуглил долго и упорно, применил несколько рекомендаций, но воз и ныне там .

Нужно чтобы размер листа менялся в соответствии со свойствами paperSize. Просьба помочь разобраться или ткнуть носом, где искать .

Спасибо.
mightyman вне форума Ответить с цитированием
Старый 01.07.2019, 19:16   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Так а принтер то поддерживает указанный размер бумаги??
Вы же не можете задавать абы что .. Там где то есть список поддерживаемых размеров. Вот из них и выбирайте. Плохо помню.. но вроде как где то можно свой кастомный формат задать и тогда он будет нормально пользоваться.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое изменение размера формы в соответствии с размером экрана ru3000 Microsoft Office Excel 18 08.11.2021 10:16
C: Блокнотик размером 4х6 см содержит 24 листа бумаги в клетку. Размер клетки 5х5 мм polyana Общие вопросы C/C++ 2 12.12.2015 16:23
Как бороться с размером пустой формы в RAD Studio XE3 Lardes Общие вопросы Delphi 5 24.12.2012 02:47
задан массив размером N. вывести на печать каждый второй элемент массива Сергей505 Паскаль, Turbo Pascal, PascalABC.NET 4 14.12.2011 17:37