Подгонка PrintDocument к формату A4

Я написал (скопировал) небольшой код, чтобы выбрать несколько файлов изображений и распечатать их каждые пять минут.

При печати изображение не помещается на бумаге. Это меньше или больше. Поэтому я хочу подогнать изображения под размер страницы A4. Я не мог найти никаких свойств для этого.

Есть ли способ сделать это?

Вот мой код:

private async void button1_Click(object btnSender, EventArgs e)
        {
            // Set the file dialog to filter for graphics files.
            this.openFileDialog1.Filter =
                "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" +
                "All files (*.*)|*.*";

            // Allow the user to select multiple images.
            this.openFileDialog1.Multiselect = true;
            this.openFileDialog1.Title = "My Image Browser";
            DialogResult dr = this.openFileDialog1.ShowDialog();

            if (dr == DialogResult.OK)
            {
                // Read the files
                foreach (string file in openFileDialog1.FileNames)
                {
                    PrintDialog printDlg = new PrintDialog();
                    PrintDocument printDoc = new PrintDocument();
                    printDoc.DocumentName = "Print Document";
                    printDlg.Document = printDoc;
                    printDlg.AllowSelection = true;
                    printDlg.AllowSomePages = true;

                    printDoc.DefaultPageSettings.Landscape = true;

                    printDoc.PrintPage += (sender, args) =>
                    {
                        Image i = Image.FromFile(file);
                        Point p = new Point(0, 0);
                        args.Graphics.DrawImage(i, p);
                    };

                    printDoc.Print();

                    await Task.Delay(300000);
                }

                Process.Start("shutdown.exe", "-s -t 00");
            }
        }

Укажите прямоугольник назначения и прямоугольник-источник вместо точки. -- Непонятно, почему вы инициализируете PrintDialog.

Jimi 16.05.2022 20:37

@Джими, ты абсолютно прав. PrintDialog ничего там не делает. :D Сначала я хотел показать это перед печатью, но мне это было не нужно. И спасибо за ваш ответ, но есть ли какой-нибудь пример для этого? Я новичок в винформс.

Milad 16.05.2022 21:04
var pageSize = printDoc.DefaultPageSettings.Bounds; [...] args.Graphics?.DrawImage(i, pageSize, new Rectangle(Point.Empty, i.Size), GraphicsUnit.Pixel); -- Небольшой расчет необходим, если вы хотите центрировать изображение на печатной странице (вот почему var pageSize там...).
Jimi 16.05.2022 21:10
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужно определять Point;
Чтобы подогнать изображение под размер страницы, просто используйте args.Graphics.DrawImage(i, args.PageBounds); вместо args.Graphics.DrawImage(i, p);

Другие вопросы по теме