2016-04-27 103 views
2

我試圖將頁碼添加到使用FileStream從個人pdf上傳到我的服務器構建的合併pdf。我從MSSQL服務器讀取pdf文件名稱列表,然後合併頁面。ITextSharp將頁碼添加到合併pdf

我知道我很可能應該使用pdfstamper,但大多數示例並不涉及我的特定代碼。

try 
{ 
    rdr = cmd2.ExecuteReader(); 

    DataTable dt = new DataTable(); 
    dt.Load(rdr); 
    List<PdfReader> readerList = new List<PdfReader>(); 
    foreach (DataRow row in dt.Rows) 
    { 
     PdfReader pdfReader = new PdfReader("http://site.azurewebsites.net/uploads/reports/" + 
      Convert.ToString(row[0])); 
     readerList.Add(pdfReader); 
    } 
    con2.Close(); 
    System.Net.Mime.ContentType contentType = new System.Net.Mime.ContentType(); 
    contentType.MediaType = System.Net.Mime.MediaTypeNames.Application.Pdf; 
    Document document = new Document(PageSize.A4, 0, 0, 0, 0); 
    //Get instance response output stream to write output file. 
    PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream); 
    document.Open(); 
    foreach (PdfReader reader in readerList) 
    { 
     for (int i = 1; i <= reader.NumberOfPages; i++) 
     { 
      PdfImportedPage page = writer.GetImportedPage(reader, i); 
      document.Add(iTextSharp.text.Image.GetInstance(page)); 
     } 
    } 
    document.Close(); 
    Response.AppendHeader("content-disposition", "inline; filename=" + Request.QueryString["id"] + "-Final"); 
    Response.ContentType = "application/pdf"; 
    } 
    } 
    catch 
    { 
    Response.Redirect("~/login.aspx", false); 
    } 
} 

private void MergePDFs(string outPutFilePath, params string[] filesPath) 
{ 
    List<PdfReader> readerList = new List<PdfReader>(); 
    foreach (string filePath in filesPath) 
    { 
     PdfReader pdfReader = new PdfReader(filePath); 
     readerList.Add(pdfReader); 
    } 
    //Define a new output document and its size, type 
    Document document = new Document(PageSize.A4, 0, 0, 0, 0); 
    //Create blank output pdf file and get the stream to write on it. 
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outPutFilePath, FileMode.Create)); 
    document.Open(); 
    foreach (PdfReader reader in readerList) 
    { 
     for (int i = 1; i <= reader.NumberOfPages; i++) 
     { 

      PdfImportedPage page = writer.GetImportedPage(reader, i); 
      document.Add(iTextSharp.text.Image.GetInstance(page)); 

     } 
    } 
    document.Close(); 
} 

在此先感謝!

+0

什麼是您的問題或問題?這裏沒有明確的問題。 – Mikanikal

+0

我試圖將pdf頁碼添加到每個合併的pdf文件中,如「第1頁,共5頁」所示。我發現這樣的例子http://developers.itextpdf.com/examples/columntext-examples/adding-page-numbers-existing-pdf,但我很努力將pdfstamper納入我的代碼。 –

回答

3

因爲它看起來像你有合併文件在一起的代碼。如果你想添加文本到PDF你會使用PdfStamper下面的代碼是我用來添加文本到PDF(你需要在X和Y點獲得它到你需要的位置)。

 using (var newPDF = new FileStream(outPutFile, FileMode.Create, FileAccess.ReadWrite)) 
    { 
      PdfReader pdfReader = new PdfReader(reader); 
      PdfStamper pdfStamper = new PdfStamper(pdfReader, newPDF); 

      for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
      { 
       PdfContentByte pdfContent = pdfStamper.GetOverContent(page); 
       Rectangle mediabox = pdfReader.GetPageSize(page); 

       pdfContent.BeginText(); 
       pdfContent.ShowTextAligned(0, "someText", xLocation, mediabox.Height - yLocation , 0); 
       pdfContent.EndText(); 


      } 

      pdfStamper.Close(); 
     } 
+0

立即嘗試Eric謝謝。 –

+0

這工作埃裏克你搖滾! –

+0

@KyleG - 開心工作:D – Eric