Как и вы, я пытался и пытался заставить это работать. В конце концов я отказался от этой идеи и просто выбрал обходной путь.
Я использую ASP.NET MVC Framework, поэтому я изменил свои маршруты для этого контроллера / действия, чтобы убедиться, что обслуживаемый файл PDF является последней частью части расположения URI (перед строкой запроса), и передать все остальное в строке запроса.
Например:
Старый URI:
http://server/app/report/showpdf?param1=foo¶m2=bar&filename=myreport.pdf
Новый URI:
http://server/app/report/showpdf/myreport.pdf?param1=foo¶m2=bar
Полученный заголовок выглядит точно так же, как вы описали (тип контента - application / pdf, расположение - встроенное, имя файла - бесполезная часть заголовка) Acrobat показывает его в окне браузера (без сохранения как диалоговое окно), и имя файла, которое автоматически заполняется, если пользователь нажимает кнопку «Acrobat Save», является именем файла отчета.
Несколько соображений:
Чтобы имена файлов выглядели прилично, в них не должно быть экранированных символов (то есть без пробелов и т. Д.) ... что немного ограничивает. В этом случае мои имена файлов генерируются автоматически, и раньше в них были пробелы, которые отображались как '% 20' в результирующем имени файла диалога сохранения. Я просто заменил пробелы подчеркиванием, и это сработало.
Это никоим образом не лучшее решение, но оно работает. Это также означает, что вам нужно иметь доступное имя файла, чтобы сделать его частью исходного URI, что может мешать работе вашей программы. Если он в настоящее время генерируется или извлекается из базы данных во время вызова на стороне сервера, который генерирует PDF, вам может потребоваться переместить код, который генерирует имя файла, в javascript как часть отправки формы или если он исходит из базы данных, сделайте его быстрый вызов ajax для получения имени файла при создании URL, который приводит к встроенному PDF.
Если вы берете имя файла из пользовательского ввода в форме, тогда оно должно быть проверено, чтобы не содержать экранированных символов, что будет раздражать пользователей.
Надеюсь, это поможет.