Просмотр PDF-файла в ASPX, а не акробат - PullRequest
1 голос
/ 23 января 2010

Когда пользователь нажимает на ссылку, он открывает новое окно (так как target = "_ blank") вызывает страницу xyz.ASPX, которая динамически создает счет в формате PDF, сохраняя его в базе данных (а не в физическом месте) и тогда мне нужно иметь возможность открыть файл PDF на странице ASPX.

Сейчас происходит то, что aspx, который генерирует файл PDF, вызывается, он делает свое дело, но затем открывает Acrobat для отображения счета в формате PDF. Однако страница xyz.aspx пуста и ничего не отображает. Мне это не нравится, и я хотел бы, чтобы xyz.aspx отображал файл PDF.

Из моего исследования кажется, что если вы хотите отобразить PDF на странице ASPX, вам нужен iFrame или пользовательский элемент управления. Однако, поскольку PDF создается динамически и не сохраняется на диске, как мне установить источник для iFrame. Есть ли способ установить src в качестве объекта ответа или другого объекта в памяти?

Есть ли простой способ сделать это? Я не хочу использовать пользовательский элемент управления. Я использую .NET 3.5 и C # с мастер-страницами и темами CSS, но я отключил его для этой страницы.

Источник xyz.aspx:

`<% @ Page language =" c # "EnableTheming =" false "<br> ContentType = "application / pdf" Codebehind = "xyz.aspx.cs" AutoEventWireup = "True" Inherits = "namespace1.xyz"%>

«

xyz.aspx.cs (получает файл PDF из БД и затем записывает в объект Response)

protected void Page_Load(object sender, EventArgs e)
    {
        byte[] pdfBinaryFile = GetPDFFileFromDB(PDFId);

        if(pdfBinaryFile != null) 

            Response.BinaryWrite(pdfBinaryFile);

}

Ответы [ 3 ]

1 голос
/ 23 января 2010

Просмотрите пользовательские обработчики (файлы .ashx) и Response.Write.

Хотя вы любите Adobe, потому что я не думаю, что их плагин играет хорошо в фреймах. Одна вещь, на которую я хотел бы обратить внимание, это вместо того, чтобы отображать PDF, вместо этого иметь предварительный просмотр HTML, а затем иметь ссылку, чтобы пользователь мог загрузить реальный PDF. Это было бы гораздо более разумным способом сделать это, потому что люди без установленного Acrobat получат красивое окно «скачать pdf», независимо от того, находится ли он в iframe или нет. (обратите внимание, я говорю Acrobat. Есть люди, у которых есть программа для чтения PDF, но нет плагина для чтения PDF для их браузера, такие как я)

Для загрузки PDF все, что вам нужно, - это собственный обработчик HTTP, который получает отправленную строку запроса, сообщающую, какой PDF-файл он хочет загрузить. (и, следовательно, не потребует записи PDF на диск)

1 голос
/ 23 января 2010

Попробуйте добавить заголовок Content-Disposition: inline:

protected void Page_Load(object sender, EventArgs e)
{
    byte[] pdfBinaryFile = GetPDFFileFromDB(PDFId);

    if (pdfBinaryFile != null)
    {
        Response.Clear();
        Response.ContentType = "application/pdf";
        Response.AppendHeader(
            "Content-Disposition", "inline; filename=\"test.pdf\"");
        Response.BinaryWrite(pdfBinaryFile);
        Response.End();
    }
}
0 голосов
/ 23 января 2010

Ищите информацию о том, какие заголовки использовать для этого здесь: Примеры заголовков PHP (Content-Disposition является одним из важных, я думаю).Может быть, это поможет.

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