Сделать отображение PDF встроенным, а не отдельным окном Acrobat Reader - PullRequest
8 голосов
/ 13 мая 2009

У меня есть класс ASP.NET ashx, который извлекает данные из базы данных, создает файл PDF с помощью iTextSharp и передает его в браузер. Браузер (по крайней мере, IE и Firefox) запускает Acrobat Reader как отдельное окно для открытия файла. Я бы хотел, чтобы он отображался в браузере как встроенный.

Это то, что я могу полностью контролировать со стороны сервера? Я уже устанавливаю заголовок Content-Type для application / pdf, и я попытался установить Content-Disposition и Content-Length. Пока ничего не получалось.

Есть ли еще один заголовок, который мне не хватает? Есть ли что-то в самом PDF-файле, что говорит браузеру, как это отобразить? Есть другие идеи?

Ответы [ 8 ]

9 голосов
/ 14 мая 2009

Установка заголовков content-disposition и content-type должна сделать это, но вам также может понадобиться вызвать Response.ClearHeaders(), чтобы очистить другие установленные заголовки.

Кроме того, попробуйте использовать Fiddler , чтобы увидеть фактические заголовки и содержимое ответа и сравнить их с заголовками сайта, который работает так, как вы хотите.

5 голосов
/ 13 мая 2009

Если вы используете ashx (веб-обработчик), попробуйте это: -

context.Response.AddHeader("content-disposition", "inline; filename=Something.pdf")
4 голосов
/ 14 мая 2009

ОК, оказалось, что это был глупый вопрос, но я рад, что задал его, потому что я никогда не слышал о Фиддлере (что привело меня к ответу, поэтому я принимаю ответ Цаулда). PDF создается веб-службой, которая предоставляет файл нескольким различным интерфейсным сайтам. Я устанавливал расположение контента на inline в сервисе, но это не имело значения, потому что браузер так и не получил этот заголовок; он получил заголовок с сайта переднего плана (который был attachment). Я изменил это на сайте переднего конца, и это исправило это.

Итак, ответ таков: у вас должны быть Content-Type=application/pdf и Content-Disposition=inline; filename=Something.pdf, как говорили другие.

1 голос
/ 13 мая 2009

Итак, у меня есть образец в одной из моих работ, который вам нужен:

<cc1:ShowPdf ID="ShowPdf1" runat="server" BorderStyle="None"  BorderWidth="0px"
        Height="750px" Style="z-index: 103; "
        Width="750px"/>

и на стороне сервера:

  ShowPdf1.FilePath = String.Format("~/Handlers/Pdf.ashx?id={0}#view=FitH&page=1&pagemode=none&navpanes=1", myPublicationId);

Я также размещаю здесь некоторый код из моего обработчика PDF:

Response.ContentType = "application/pdf";
    byte[] bytes = YourBinaryContent;

    using (BinaryWriter writer = new BinaryWriter(context.Response.OutputStream))
    {
        writer.Write(bytes, 0, bytes.Length);
    }

В любом случае, если мое сообщение не кажется вам понятным, взгляните на этот пример Как отображать документы PDF с ASP.NET

1 голос
/ 13 мая 2009

Попробуйте сгенерировать их на своей странице, используя html OBJECT.

<OBJECT WIDTH=640 HEIGHT=480>
    <PARAM NAME="SRC" VALUE="<%=filePath%>"> 
    <EMBED SRC=<%=filename.pdf%> WIDTH=1000 HEIGHT=680> 
        <NOEMBED> PDF should have displayed here!</NOEMBED> 
        </EMBED>
</OBJECT>

Если вам нужно передать ответ с помощью ashx, а не вернуть aspx, я думаю, вам не повезло.

В противном случае, я считаю, что настройки, отображаемые в браузере или нет, полностью зависят от клиента и не зависят от вас.

0 голосов
/ 13 мая 2009

Если у вас есть бюджет, моя компания продает набор продуктов, который включает просмотрщик изображений на основе AJAX , который позволит вам просматривать страницы PDF в режиме без Acrobat вообще. В простейшем виде это просто средство просмотра, но вы можете создавать интерактивные слои по мере необходимости.

0 голосов
/ 13 мая 2009

Вот статья об использовании тега embed для этого: http://blogs.adobe.com/pdfdevjunkie/2007/08/using_the_html_embed_tag_to_di.html

0 голосов
/ 13 мая 2009

Я думаю, этот заголовок будет делать то, что вы хотите

Content-type: application/pdf

Поскольку вы говорите, что это не работает, то я подозреваю, что это настройка конфигурации на стороне клиента.

Проверьте установленную версию Adobe Acrobat. В настройках «Интернет» есть настройка и флажок «Отображать PDF в браузере».

-
BMB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...