2016-04-20 28 views
2

我正在編寫一個應用程序在c#中填充一堆pdf格式,連接它們,然後放入一些頁碼。我對pdfstamper的記憶流結果感到困難。如果我將內存流更改爲文件流,它可以正常工作,但我不想使用文件系統。我創建了下面的代碼片段再現我的錯誤:試圖從pdfstamper獲取內存流到PDF閱讀器,但得到:「PDF的startxref沒有找到」

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