Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать изображения с кастомным размером бумаги 
:(
    Опции темы
Mightyman
Дата 1.7.2019, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 1.7.2019

Репутация: нет
Всего: нет



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

Сразу оговорюсь, что разработчиком не являюсь, так что просьба сдерживать ваш гнев праведный . Так или иначе понадобилось мне, для проверки некоторых нюансов работы 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 - 1.7.2019, 12:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0945 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.