2010-11-08 10 views
9

Ich möchte eine Seite zu einem vorhandenen PDF-Dokument hinzufügen, das einfachen Text enthält.Hinzufügen einer Seite zu einem PDF-Dokument mit iTextSharp

Ich habe den folgenden Code versucht, die ich im Internet gefunden, aber bisher habe ich es nicht zur Arbeit bekam:

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(); 

Bitte lassen Sie mich wissen, wie dieses Recht zu tun?

Antwort

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

Hallo, während ich "document.NewPage();" verwende Methode, um eine neue Seite zu erstellen, wird es meinen Inhalt mit Header überlappen. Wie vermeidet man also Überschneidungen mit dem Header beim Hinzufügen einer neuen Seite? Bitte helfen. Vielen Dank – Herin

2

Sie können PdfCopy nicht zum Hinzufügen von Seiten verwenden. Sie müssen ein neues PDF erstellen und es hinzufügen. Wenn Sie das tun müssen (PdfCopy ist das beste zum Zusammenführen von PDF).

Ich habe ein Beispiel hinzugefügt, wie auch eine Fußzeile hinzuzufügen:

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

Diesen Code Versuchen: Es wird eine neue Seite mit bestehenden pdf und Wasserzeichen Text auf diese letzte Seite hinzufügen.

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; 
     } 
Verwandte Themen