У нас есть клиент, который передает отчеты SSRS в два приложения: одно в консоль, а второе в приложения WinForms. Консольное приложение автоматически создает последний отчет для пользователей и имеет возможность автоматической печати того же отчета на выбранном по умолчанию принтере. При экспорте отчета в PDF отчет выглядит идеально, но когда отчет распечатывается автоматически, размер текста немного уменьшается, расстояние между текстом уменьшается, а некоторые места размещения отличаются от автоматически сгенерированного PDF.
Когда отчет печатается автоматически, мы передаем отчет как изображение, а затем создаем собственный метод PrintPage для создания прямоугольника, затем устанавливаем изображение внутри прямоугольника и затем отправляем изображение на печать (см. код ниже).
private void PrintPage(object sender, PrintPageEventArgs ev)
{
var pageImage = new Metafile(_mStreams[_currentPageIndex]);
// Adjust rectangular area with printer margins.
var adjustedRect = new Rectangle(
ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
ev.PageBounds.Width,
ev.PageBounds.Height);
// Draw a white background for the report
ev.Graphics.FillRectangle(Brushes.White, adjustedRect);
// Draw the report content
ev.Graphics.DrawImage(pageImage, adjustedRect);
// Prepare for the next page. Make sure we haven't hit the end.
_currentPageIndex++;
ev.HasMorePages = (_currentPageIndex < _mStreams.Count);
}
Поля и размер страницы совпадают, когда процесс завершен, но явно существуют различия в том, как текст отображается на копии, напечатанной автоматически. Ниже приведены снимки экрана двух отчетов, где вы можете видеть, что интервалы и размещение части текста немного отличаются от автоматически сгенерированного отчета в формате PDF. Эта проблема больше влияет на отчеты, когда речь идет о больших 50-страничных документах, где автоматически сгенерированный PDF-файл содержит на несколько страниц больше, чем экспорт изображения.
Автоматически сгенерированный снимок экрана
Автоматически напечатанный снимок экрана
Любая помощь в этом очень ценится, спасибо.