Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 14.09.2015
Сообщений: 6

Печать формы с кастомным размером бумаги

01.07.2019, 11:29. Показов 1658. Ответов 0

Студворк — интернет-сервис помощи студентам
Приветствую, фрумчане!

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

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
        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. Просьба помочь разобраться или ткнуть носом, где искать .

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2019, 11:29
Ответы с готовыми решениями:

Печать на нестандартном размере бумаги
Коллеги, с печатью столкнулся в первый раз и застопорился на вроде бы простой задачке: Есть принтер для печати на пластиковых...

Печать. Задание произвольного размера бумаги
всем приветы. Пишу приложение для печати чертежей из SOLIDWORKS. Чертежи печатаются в формат PDF через виртуальный принтер PDFCreator. ...

Из листа клетчатой бумаги размером M умножить N клеток удалили некоторые клетки
Из листа клетчатой бумаги размером m * N клеток удалили некоторые клетки. На сколько кусков распадется оставшаяся часть листа? Пример....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2019, 11:29
Помогаю со студенческими работами здесь

Печать таблицы (автоматический подгон под размер бумаги)
Здравствуйте, помогите с написанием кода для печати таблицы на бумагу. Поискав в интернете не нашел не чего хорошего, не полностью...

Есть полоска бумаги шириной a и длиной b см. На какое максимальное количество квадратиков размером a x a см можно ее разрезать? Входные данные вводятс
Есть полоска бумаги шириной a и длиной b см. На какое максимальное количество квадратиков размером a x a см можно ее разрезать? Входные...

Из листа клетчатой бумаги размером М*Н клеток удалили некоторые клетки. На сколько кусков распадется оставшаяся часть листа?
Срочно нужна помощь в выполнении данной задачи, т.к. в Паскале я полный 0. кому не сложно и есть время - выручите. Буду очень признателен

Вывести на печать матрицу размером 20*15 из положительных чисел
Вывести на печать матрицу размером 20*15 из положительных чисел. В этой матрице определить максимальный элемент и его положение . Вывести...

Печать текста из richTextBox с тем же шрифтом и его размером
Добрый вечер! У меня приложение "Записная книжка" (1 рисунок) реализовано через richTextBox. Нужно при нажатии на кнопку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru