Я печатаю пользовательские страницы в C #. При фактической печати документа он работает правильно, как и при отображении его в диалоговом окне (через тот же код). Когда код используется для PrintPreview
, диалоговое окно показывает страницу в альбомном режиме, но созданный Graphics
имеет размеры портретного документа, и поэтому предварительный просмотр не отображается правильно. Вот урезанная версия кода, который я использую
using (PrintDocument pd = new PrintDocument())
{
pd.PrinterSettings.PrintToFile = false;
pd.DefaultPageSettings.Landscape = true;
pd.PrinterSettings.DefaultPageSettings.Landscape = true;
pd.DefaultPageSettings.PrinterSettings.DefaultPageSettings.Landscape = true;
PrintDialog pDialog = new PrintDialog();
pDialog.Document = pd;
pDialog.PrinterSettings.DefaultPageSettings.Landscape = true;
pDialog.PrinterSettings.PrintToFile = false;
pDialog.Document.DefaultPageSettings.Landscape = true;
PrintPreviewDialog printPreview = new PrintPreviewDialog();
printPreview.Document = pd;
printPreview.ShowDialog();
}
Затем вызывается функция Print_Me
, когда диалоговое окно PrintPreview
запрашивает печать:
private void Print_Me(object sender, PrintPageEventArgs e)
{
using (Graphics g = e.Graphics)
{
DrawToDC(g);
e.HasMorePages = hasMorePages;
}
}
Внутри DrawToDC
Я использую следующее, чтобы получить размеры, которые, как я уже говорил, прекрасно работает для реальной печати и отображения в диалоговом окне:
dc.VisibleClipBounds.Width
dc.VisibleClipBounds.Height