2016-04-19 7 views
1

Я следовал за ранним примером создания PDF в книге iText в действии. Я использую iTextSharp в простой ASP.Net Webform для создания PDF. При просмотре источника в UltraEdit я заметил, что мой HTML со страницы вставлялся в нижней части файла. Затем я проверил предыдущий отчет, который мы построили в iTextSharp, и заметил, что у него есть источник HTML, встроенный внизу (хотя и в сжатом формате). HTML не отображается в визуализированном PDF-файле, просто источник.HTML встроен в источник pdf (iTextSharp)

Я пытаюсь понять, почему это происходит, и если есть способ остановить его.

На странице у меня есть кнопка, которая вызывает это событие (последний блок этого код, чтобы иметь загрузку документа локально Это не в примере в книге.):

protected void BtnSamplePDF_Click(object sender, EventArgs e) 
     { 
      using (var memStream = new MemoryStream()) 
      { 
       var document = new Document(); 
       var writer = PdfWriter.GetInstance(document, memStream); 
       document.SetPageSize(PageSize.A5); 
       document.SetMargins(36, 72, 108, 180); 
       document.SetMarginMirroringTopBottom(true); 

       document.Open(); 

       PdfContentByte canvas = writer.DirectContentUnder; 
       writer.CompressionLevel = 0; 
       canvas.SaveState(); 
       canvas.BeginText(); 
       canvas.MoveText(36, 788); 
       canvas.SetFontAndSize(BaseFont.CreateFont(), 12); 
       canvas.ShowText("Hello World"); 
       canvas.EndText(); 
       canvas.RestoreState(); 

       document.Close(); 

       string fileName = "attachment;filename=" + "practice.pdf"; 
       Response.ContentType = "application/pdf"; 
       Response.AddHeader("Content-Disposition", fileName); 
       Response.BinaryWrite(memStream.ToArray()); 
       Response.OutputStream.Flush(); 
       Response.OutputStream.Close(); 
      } 
     } 

Ф источник начинается с типовыми заголовками

%PDF-1.4 
%âãÏÓ 
2 0 obj 
<</Length 81/Filter/FlateDecode>>stream 

в конце, хотя вы можете увидеть, что он добавляет HTML из вызывающей страницы

</Size 7/Root 5 0 R/Info 6 0 R/ID [<aff0a4a6eb7e3827497db957aaef3eb3><aff0a4a6eb7e3827497db957aaef3eb3>]>> 
%iText-5.5.1 
startxref 
620 
%%EOF 


<!DOCTYPE html> 
<!--[if IE 8]>   <html class="no-js lt-ie9" lang="en"> <![endif]--> 
<!--[if gt IE 8]><!--> 
<html class="no-js" lang="en"> 
<!--<![endif]--> 
... 

Он продолжается со всем HTML с этой страницы, встроенной в файл.

+1

Я не могу вспомнить, какие части конвейера начинаются и заканчиваются, но можете ли вы попробовать бросить 'Response.Close()' там тоже? –

ответ

0

Ваш BtnSamplePDF_Click будет делать обратную передачу страницы - остальная часть вашей логики кода прекрасна, но по мере того, как страница запрашивается для визуализации, вы получаете эти результаты.

Если вы изменили код так, что вы вызываете обработчик (ashx), возвращающий байт [], он будет работать.

Смежные вопросы