С помощью респондентов здесь и на других форумах я нашел простой взлом, который, похоже, решил мою проблему. Это пришло ко мне после того, как я прекратил борьбу с SSRS. Я уверен, что существует множество совершенно веских причин того, почему SSRS обрабатывает различные параметры разрешения так же, как и он. Честно говоря, я не кричу. Мне просто нужно, чтобы мой документ был сгенерирован с указанным размером и разрешением.
Вот соответствующие фрагменты кода (обработка ошибок удалена для краткости). Я вызываю SSRS через интерфейс веб-службы, генерирую отчет и отображаю его как TIFF размером 300 x 300. Результаты временно сохранены. Он будет сгенерирован как TIFF 96ppi и увеличен. Затем я читаю его в BitMap, меняю разрешение на 300 x 300 и снова записываю обратно. Готово.
string deviceInfo = "<DeviceInfo> <OutputFormat>TIFF</OutputFormat> <DpiX>300</DpiX> <DpiY>300</DpiY> <PrintDpiX>300</PrintDpiX> <PrintDpiY>300</PrintDpiY> </DeviceInfo>";
string format = "IMAGE";
Byte[] results;
string mimeType = "image/tiff";
// Generate the report as a TIF
ExecutionInfo ei = new ExecutionInfo();
ei = rsExec.LoadReport(_reportName, historyID);
results = rsExec.Render(format, deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
string TempFileRSGeneratedTIFF = TempPath + "RSGeneratedTIFF.TIF";
// Save tiff file returned by RS
using (FileStream stream = File.OpenWrite(TempFileRSGeneratedTIFF))
{
stream.Write(results, 0, results.Length);
}
// Read tif file into bitmap
Bitmap image = new Bitmap(TempFileRSGeneratedTIFF);
// Change the resolution to what it was supposed to be in the first place..
image.SetResolution(300, 300);
// Save the final version of the file
image.Save(DestFileName, System.Drawing.Imaging.ImageFormat.Tiff);
image.Dispose();