2010-11-08 13 views
9

Je voudrais ajouter une page à un document PDF existant contenant du texte simple.Ajouter une page au document PDF en utilisant iTextSharp

J'ai essayé le code suivant que j'ai trouvé sur Internet, mais jusqu'à présent, je ne l'ai pas travailler:

PdfReader reader = new PdfReader("1.pdf"); 
Document document = new Document(reader.GetPageSize(1)); 
PdfCopy copier = new PdfCopy(doc, new FileStream("2.pdf", FileMode.Create)); 

for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++) 
{ 
    //byte[] page = reader.GetPageContent(pageCounter); 
    copier.AddPage(copier.GetImportedPage(reader, pageCounter)); 
} 

copier.NewPage(); 
copier.Add(new Paragraph("This is added text")); 

document.Close(); 
reader.Close(); 

S'il vous plaît laissez-moi savoir comment faire de ce droit?

Répondre

19
private static string AddCommentsToFile(string fileName, string userComments) 
    { 
     string outputFileName = Path.GetTempFileName(); 
     //Step 1: Create a Docuement-Object 
     Document document = new Document(); 
     try 
     { 
      //Step 2: we create a writer that listens to the document 
      PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create)); 

      //Step 3: Open the document 
      document.Open(); 

      PdfContentByte cb = writer.DirectContent; 

      //The current file path 
      string filename = fileName; 

      // we create a reader for the document 
      PdfReader reader = new PdfReader(filename); 

      for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++) 
      { 
       document.SetPageSize(reader.GetPageSizeWithRotation(1)); 
       document.NewPage(); 

       //Insert to Destination on the first page 
       if (pageNumber == 1) 
       { 
        Chunk fileRef = new Chunk(" "); 
        fileRef.SetLocalDestination(filename); 
        document.Add(fileRef); 
       } 

       PdfImportedPage page = writer.GetImportedPage(reader, pageNumber); 
       int rotation = reader.GetPageRotation(pageNumber); 
       if (rotation == 90 || rotation == 270) 
       { 
        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageNumber).Height); 
       } 
       else 
       { 
        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 
       } 
      } 

      // Add a new page to the pdf file 
      document.NewPage(); 

      Paragraph paragraph = new Paragraph(); 
      Font titleFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA 
             , 15 
             , iTextSharp.text.Font.BOLD 
             , BaseColor.BLACK 
       ); 
      Chunk titleChunk = new Chunk("Comments", titleFont); 
      paragraph.Add(titleChunk); 
      document.Add(paragraph); 

      paragraph = new Paragraph(); 
      Font textFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA 
            , 12 
            , iTextSharp.text.Font.NORMAL 
            , BaseColor.BLACK 
       ); 
      Chunk textChunk = new Chunk(userComments, textFont); 
      paragraph.Add(textChunk); 

      document.Add(paragraph); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 
     finally 
     { 
      document.Close(); 
     } 
     return outputFileName; 
    } 
+0

Bonjour, Alors que j'utilise "document.NewPage();" méthode pour créer une nouvelle page, il va chevaucher mon contenu avec en-tête. Alors, comment éviter le chevauchement avec l'en-tête lors de l'ajout d'une nouvelle page? S'il vous plaît aider. Merci – Herin

2

Vous ne pouvez pas utiliser PdfCopy pour ajouter des pages. Vous devrez créer un nouveau pdf et l'ajouter Si vous avez besoin de le faire (PdfCopy est le meilleur pour la fusion pdf).

J'ai ajouté un exemple comment ajouter un pied de page aussi:

PdfReader reader = new PdfReader("1.pdf"); 
Document document = new Document(reader.GetPageSize(1)); 
PdfCopy copier = new PdfCopy(doc, new FileStream("2.pdf", FileMode.Create)); 

for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++) 
{ 
    // get page 
    PdfImportedPage page = copier.GetImportedPage(reader, pageCounter) 
    // add content to imported page 
    PageStamp ps = pdfCopy.CreatePageStamp(page); 
    PdfContentByte cb = ps.GetOverContent(); 
    // set color 
    cb.SetColorFill(BaseColor.BLACK); 
    // get font 
    BaseFont baseFont = BaseFont.CreateFont(string.Format("{0}\\Fonts\\arialuni.ttf", Environment.GetEnvironmentVariable("windir"), BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
    cb.SetFontAndSize(baseFont, 12); 
    cb.BeginText(); 
    cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, printLangString, 100f, 40f, 0f); 
    cb.EndText(); 
    // Accept changes      
    ps.AlterContents(); 
    // add page 
    copier.AddPage(page); 
} 

using (var ms = new MemoryStream()) 
{ 
    Document doc = new Document(PageSize.A4); 
    PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
    writer.CloseStream = false; 
    doc.Open(); 
    doc.NewPage(); 
    doc.Add(new Paragraph(error, fontRed)); 
    doc.Close(); 
    writer.Close(); 
    ms.Seek(0, SeekOrigin.Begin); 
    PdfReader rd = new PdfReader(ms); 
    for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++) 
    { 
     copier.AddPage(copier.GetImportedPage(rd, pageCounter)); 
    } 
    rd.Close(); 
} 

document.Close(); 
reader.Close(); 
3

Essayez ce code: Il ajoute une nouvelle page avec existante pdf et ajouter du texte en filigrane à cette dernière page.

private string AddWaterMarkPageToFile(string fileName, string userComments) 
     { 
      string outputFileName = Path.GetTempFileName() + ".pdf"; 
      //Step 1: Create a Docuement-Object 
      Document document = new Document(); 
      try 
      { 
       //Step 2: we create a writer that listens to the document 
       PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create)); 

       //Step 3: Open the document 
       document.Open(); 

       PdfContentByte cb = writer.DirectContent; 

       //The current file path 
       string filename = fileName; 

       // we create a reader for the document 
       PdfReader reader = new PdfReader(filename); 

       for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++) 
       { 
        document.SetPageSize(reader.GetPageSizeWithRotation(1)); 
        document.NewPage(); 

        //Insert to Destination on the first page 
        if (pageNumber == 1) 
        { 
         Chunk fileRef = new Chunk(" "); 
         fileRef.SetLocalDestination(filename); 
         document.Add(fileRef); 
        } 

        PdfImportedPage page = writer.GetImportedPage(reader, pageNumber); 
        int rotation = reader.GetPageRotation(pageNumber); 
        if (rotation == 90 || rotation == 270) 
        { 
         cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageNumber).Height); 
        } 
        else 
        { 
         cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 
        } 
       } 

       // Add a new page to the pdf file 
       document.NewPage(); 

       float fontSize = 80; 
       float xPosition = iTextSharp.text.PageSize.A4.Width/2; 
       float yPosition = (iTextSharp.text.PageSize.A4.Height - 140f)/2; 
       float angle = 45; 

       PdfContentByte under = writer.DirectContentUnder; 
       BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED); 
       under.BeginText(); 
       under.SetColorFill(BaseColor.LIGHT_GRAY); 
       under.SetFontAndSize(baseFont, fontSize); 
       under.ShowTextAligned(PdfContentByte.ALIGN_CENTER, userComments, xPosition, yPosition, angle); 
       under.EndText(); 

      } 
      catch (Exception e) 
      { 
       throw e; 
      } 
      finally 
      { 
       document.Close(); 
      } 
      return outputFileName; 
     }