Проблема заключается в следующей строке:
Response.OutputStream.Write(MS.GetBuffer(), 0, MS.GetBuffer().Length)
Метод GetBuffer возвращает весь внутренний буфер, который больше фактического содержимого.В плохом PDF-файле содержится около 10 КБ мусорного содержимого в конце (нулевых байтов), в хорошем PDF-файле всего несколько байтов.Используйте метод ToArray () потока памяти, чтобы получить файл PDF, и проблема будет решена.Вы также получите меньшие файлы.
byte[] pdf = MS.ToArray();
Response.OutputStream.Write(pdf, 0, pdf.Length);
Также установите «Content-Length» с длиной массива pdf.