2016-04-27 104 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