2014-10-28 258 views
0

在代碼中,我正在使用iTextSharp創建一個PDF文檔的過程。我已經將內容添加到文檔中,並關閉了文檔,並在響應Web瀏覽器時成功檢索了該文檔。如何使用iTextSharp將PDF文件從二進制文件附加到已進行中的PDF文件中?

我想要做的是將另一個PDF文檔附加到我創建的文檔,但它必須來自二進制或Byte[]類型的對象。

我意識到有可用的方法document.Add(stuff)但我試圖將二進制轉換爲對象,然後基本上將其添加到正在進行的文檔。我看過類似於我的場景的問題和帖子,但他們主要處理圖片。

這是我有...

while (sqlExpDocDataReader.Read()) 
{ 
    // Read data and fill temp. objects 
    string docName = sqlExpDocDataReader["docName"].ToString(); 
    string docType = sqlExpDocDataReader["docType"].ToString(); 
    Byte[] docData = (Byte[])sqlExpDocDataReader["docData"]; 

    // Get current page size 
    var pageWidth = document.PageSize.Width; 
    var pageHeight = document.PageSize.Height; 

    // Is this an image or PDF? 
    if (docType.Contains("pdf")) 
    { 
     // Could I use a memeory stream some how? 
     MemoryStream ms = new MemoryStream(docData.ToArray()); 
    } 
    else 
    { 
     // Here I see how to do it with images. 
     Image doc = Image.GetInstance(docData); 
     doc.ScaleToFit(pageWidth, pageHeight); // width, height 
     document.Add(doc); 
    } 
} 

任何想法?

回答

0

隨着多一點挖,這裏是我如何能夠解決我的問題...

基本上,我從我的二進制數據創建了一個MemoryStream對象,然後創建一個PdfReader讀取該對象,而正常情況下我們會讀取一個文件。 然後我遍歷閱讀器對象的每個頁面(如果你願意的話),並將它們追加到發現的地方。

if (docType.Contains("pdf")) 
{ 
    MemoryStream ms = new MemoryStream(docData.ToArray()); 
    PdfReader pdfReader = new PdfReader(ms); 

    for (int i = 1; i <= pdfReader.NumberOfPages; i++) 
    { 
     PdfImportedPage page = writer.GetImportedPage(pdfReader, i); 
     document.Add(iTextSharp.text.Image.GetInstance(page)); 
    } 
} 
+0

奇怪的是,似乎我們可以使用相同的方法來添加圖像的頁面。 – 2014-10-28 21:06:32

相關問題