Я написал (скопировал) небольшой код, чтобы выбрать несколько файлов изображений и распечатать их каждые пять минут.
При печати изображение не помещается на бумаге. Это меньше или больше. Поэтому я хочу подогнать изображения под размер страницы 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 ничего там не делает. :D Сначала я хотел показать это перед печатью, но мне это было не нужно. И спасибо за ваш ответ, но есть ли какой-нибудь пример для этого? Я новичок в винформс.
var pageSize = printDoc.DefaultPageSettings.Bounds; [...] args.Graphics?.DrawImage(i, pageSize, new Rectangle(Point.Empty, i.Size), GraphicsUnit.Pixel);
-- Небольшой расчет необходим, если вы хотите центрировать изображение на печатной странице (вот почему var pageSize
там...).
Вам не нужно определять Point;
Чтобы подогнать изображение под размер страницы, просто используйте args.Graphics.DrawImage(i, args.PageBounds);
вместо args.Graphics.DrawImage(i, p);
Укажите прямоугольник назначения и прямоугольник-источник вместо точки. -- Непонятно, почему вы инициализируете PrintDialog.