2015-06-05 2 views
4

у меня есть этот код:.iTextSharp: «Документ не открыт» ошибка - когда это на самом деле

private static byte[] ConvertPdfDocument(Document document, PdfPTable headerTable, PdfPTable affidavitsTable) 
    { 
     byte[] b; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      PdfWriter writer = PdfWriter.GetInstance(document, ms); 

      if (document.IsOpen() == false) 
      { 
       document.Open(); 
      } 

      document.Add(headerTable); 
      document.Add(affidavitsTable); 
      document.Close(); 
      writer.Close(); 
      b = ms.ToArray(); 
     } 

     return b; 
    } 

Открыта «документ» объект (используя document.Open() вне этого метода затем передается в

условия document.IsOpen() имеет значение правда, я еще раз подтвердил, что документ фактически открыт, глядя на частные свойствах «документ» объект в отладчике;. он показывает, что «Open» является «истинным»

. Соответственно, выполнение переходит к линия document.Add(headerTable).

И в этот момент выдается исключение: «Документ не открыт». И хотя отладчик остановлен (из-за того, что это исключение выбрасывается), используя те же два способа, которые описаны выше, я могу еще см. Документ открыт.

Как это могло быть?

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

Любая помощь будет принята с благодарностью.

Спасибо большое, Элиэзер

ответ

8

Документ должен быть открыт после того, как используется в PdfWriter.GetInstance() иначе ни один писатель не связан и ничего не делает.

+0

Пауло, вы правы; открытие документа «снова» (например, document.Open();) действительно работает. Но почему метод IsOpen() возвращает True, когда это, по-видимому, не так? ... – Eliezer

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