2016-04-27 12 views
2

私は自分のサーバーにアップロードされた個々のpdfのFileStreamを使用して構築された結合されたpdfにページ番号を追加しようとしています。私はMSSQLサーバーからpdfファイル名のリストを読んで、ページをマージします。ITextSharp合併するページ番号を追加

ほとんどの場合、私は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

"ページ1/5"のように、pdfページ番号を各マージされたpdfファイルに追加しようとしています。私はこの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

関連する問題