Да, это не правильный способ сделать это. Graphics.Dpix возвращает разрешение принтера, обычно 600 точек на дюйм. Но то, что вы рисуете, не зависит от разрешения. Так что вам не нужно делать ничего особенного, когда пользователь выбирает другой принтер, скажем, с разрешением 300 точек на дюйм. Важно, потому что в противном случае ваш документ будет в два раза больше и больше не будет соответствовать бумаге.
Независимое от разрешения отображение определяется Graphics.PageUnit. По умолчанию используется дисплей, который составляет один пиксель 0,01 дюйма. Другими словами, чтобы получить распечатку размером 2 на 2 дюйма, вы просто используете прямоугольник 200 x 200. Вы можете изменить PageUnit, если вы действительно хотите, Inches - одна из настроек. Затем вы бы использовали прямоугольник 2х2. Тогда вам, конечно, придется использовать перегрузки метода Graphics, которые принимают PointF и RectangleF, целочисленные версии не будут хорошо работать.
По умолчанию (Дисплей) удобно, потому что он делает то, что вы рисуете на экране, примерно того же размера, что и на принтере. Поскольку общее разрешение для дисплея составляет 96 точек на дюйм, достаточно близко к 1 пикселю == 0,01 ". Это позволяет повторно использовать код, который рисует материал на экране, а также на принтере.