2014-12-22 3 views
0

У меня есть PDF-файл в один URL, и то, что я ищу, чтобы создать одну кнопку в SilverLight, когда я нажимаю он загружает этот PDF файлзагрузить PDF файл из URL с помощью Silverlight

ФПВ в URL загрузки этот файл (если мы используем браузер) ведьма генерируется в ASP.net и здесь код:

 var ms = new MemoryStream(); 

     Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 
     PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
     pdfDoc.Open(); 
     pdfDoc.Add(new Paragraph("Welcome to dotnetfox")); 

     iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(new Uri(url)); 
     pdfDoc.Add(jpg); 
     pdfDoc.Close(); 

     Response.Clear(); 
     Response.ContentType = "application/octet-stream"; 
     Response.AddHeader("content-disposition", "attachment;" + 
             "filename=demo.pdf"); 
     Response.Buffer = true; 

     Response.Clear(); 
     ms.Position = 0; 
     var bytes = ms.ToArray(); 
     Response.OutputStream.Write(bytes, 0, bytes.Length); 

     Response.OutputStream.Flush(); 
+0

Вы ничего не делаете с 'MemoryStream', тогда вы получаете 0 байтов этого пустого потока памяти и отправляете их в ответ, вы также просто отбрасываете все файлы PDF, которые вы делаете. –

ответ

0

Вы делаете такую ​​же ошибку, как человек, который разместил этот вопрос: How to convert a pdf generating in response.outputStream to a Base64 encoding

Вы сначала сказать IText Sharp писать PDF синтаксис прямо в Outputstream в Response:

PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 

Этот Outputstream является автоматически закрывается в этой строке:

pdfDoc.Close(); 

Все, что следует за этим Close линии происходит слишком поздно:

  • Вы не можете установить заголовки после содержание было написано на Response.OutputStream.
  • Вы не можете добавить дополнительный контент послеResponse.OutputStream был закрыт.

Кроме того, вы конвертируете объект ms в массив байтов, но мы не видим, вы добавления каких-либо байтов в этом MemoryStream везде.

Наконец, вопрос плохо сформулирован.

  • Когда вы говорите У меня есть PDF файл в одном URL, люди будут считать, что у вас есть статический PDF в файловой системе, которая может быть достигнута с помощью URL. Ваш образец кода противоречит этому. В своем примере кода вы создаете PDF на лету в веб-приложении. Это не то же самое, что у , имеющих PDF в одном URL-адресе.
  • Вы говорите, что хотите, чтобы кнопка в Silverlight загружала PDF-файл, когда кто-то его щелкал, но я не вижу никакого кода, который предоставляет эту кнопку в любом месте. Я предполагаю, что эта часть вашего вопроса не имеет значения. Вы хотите создать PDF-файл в веб-приложении. Это, вероятно, не имеет значения для вас, если вы получите этот PDF-файл с сервера приложений с помощью браузера или кнопки в Silverlight. Если это предположение неверно, вы предоставляете неправильный образец кода. Это неправильно, потому что он никогда не может работать (по причинам, указанным в моем ответе), и это неправильно, потому что это не имеет значения, если фактическая проблема - это кнопка, а не PDF. Если вы хотите получить документ из URL-адреса в Silverlight, вы не должны пометить свой вопрос как PDF-файл или вопрос iTextSharp. Вместо этого вы должны сосредоточиться на сути своего вопроса: Как создать кнопку для извлечения документа с сервера?
Смежные вопросы