Как задать размер области печати в формате А4 в приложении, созданном с использованием WPF?

Как можно поправить код так, чтобы прямоугольник, который вы пытаетесь напечатать на A4-листе, не сдвигался и нормально печатался в указанных размерах?
  • 8 марта 2024 г. 18:19
Ответы на вопрос 2
Для задания размера области печати в формате А4 в приложении, созданном с использованием WPF, можно использовать класс `PrintDialog`. Ниже представлен пример кода, который позволит задать размер области печати в формате А4:

```c#
PrintDialog printDialog = new PrintDialog();
printDialog.PrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4);
printDialog.PrintTicket.PageOrientation = PageOrientation.Landscape;

if (printDialog.ShowDialog() == true)
{
    // Здесь можно добавить код для печати
}
```

Чтобы исправить код так, чтобы прямоугольник не сдвигался и печатался нормально, нужно учесть сдвиги при задании координат и размеров прямоугольника. Например, если вы хотите отобразить прямоугольник в верхнем левом углу A4-листа, то можно использовать следующий код:

```c#
PrintDialog printDialog = new PrintDialog();
printDialog.PrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4);

if (printDialog.ShowDialog() == true)
{
    DrawingVisual visual = new DrawingVisual();
    using (DrawingContext dc = visual.RenderOpen())
    {
        Rect rect = new Rect(0, 0, printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);
        dc.DrawRectangle(Brushes.Black, new Pen(Brushes.Black, 1), rect);
    }

    printDialog.PrintVisual(visual, "MyRectangle");
}
```

В этом случае прямоугольник будет отображаться в левом верхнем углу A4-листа и не будет сдвигаться при печати.
Ну так у вьюбокса и рамки размеры одинаковые, и у рамки еще указано свойство Margin, которое добавляет внешний отступ к элементу, те рамка получается больше размером и соответственно не влазит в родительский элемент.
Похожие вопросы