2016-04-20 7 views
2

Я пишу приложение в C#, которое заполняет кучу форматов PDF, объединяет их, а затем помещает некоторые номера страниц. У меня возникают трудности с результатом memystream из pdfstamper. Если я изменю memystream на filestream, он отлично работает, но я не хочу использовать файловую систему. Я создал следующий фрагмент кода, который воспроизводит мою ошибку:Попытка получить поток памяти из pdfstamper в pdfreader, но получение: «PDF startxref not found»

public static void TestStreams(string filepath) 
    { 
     PdfReader reader = new PdfReader(filepath); 
     MemoryStream ms = new MemoryStream(); 
     PdfReader.unethicalreading = true; 
     PdfStamper stamper = new PdfStamper(reader, ms); 
     byte[] result = ms.ToArray(); 
     //The error is in the following line 
     PdfReader reader2 = new PdfReader(result); 
    } 

Ошибка является:

iTextSharp.text.exceptions.InvalidPdfException was unhandled 
    HResult=-2146232800 
    Message=Rebuild failed: trailer not found.; Original message: PDF startxref not found. 
    Source=itextsharp 

Как я могу это исправить?

ответ

2

Вы забыли одну строку:

public static void TestStreams(string filepath) { 
    PdfReader reader = new PdfReader(filepath); 
    MemoryStream ms = new MemoryStream(); 
    PdfReader.unethicalreading = true; 
    PdfStamper stamper = new PdfStamper(reader, ms); 
    stamper.Close(); 
    byte[] result = ms.ToArray(); 
    //The error is in the following line 
    PdfReader reader2 = new PdfReader(result); 
} 

Когда вы делаете ms.ToArray() без первого закрытия stamper, у вас есть неполный PDF. PDF начинается с %PDF-, но нет %%EOF, нет трейлера, нет каталога. Неполный PDF-файл не может быть прочитан PdfReader.

+0

Работает как очарование. Должно было прийти к stackoverflow раньше. Благодаря! – Maleki