2010-01-22 4 views
1

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

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

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

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

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

< `% языка @ Page = "C#" EnableTheming = "ложных"
CONTENTTYPE = "приложения/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); 

}

ответ

0

Посмотрите на информацию о том, что заголовки, чтобы использовать для этого здесь: PHP header examples (контент- Планировка - один важный, я думаю). Может быть, это поможет.

1

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

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

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

1

Попробуйте добавить 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(); 
    } 
} 
Смежные вопросы