2011-01-05 8 views
0

J'ai essayé de le faire en utilisant this tutorial comme base, mais il lance une exception de référence nulle à la ligne spécifiée ci-dessous. Devrais-je faire cela différemment? Si ce n'est pas le cas, pourquoi lancer une exception de référence nulle (page et cb ne sont pas NULL). Code:Comment joindre deux PDF en utilisant iTextSharp?

 string filePath = @"c:\temp\test_new.pdf"; 
     string attachPath = @"c:\temp\test.pdf"; 

     Console.WriteLine("Begin!"); 
     Document d = new Document(); 

     if(File.Exists(filePath)){File.Delete(filePath);} 

     FileStream fs = new FileStream(filePath, FileMode.Create); 

     PdfWriter pw = PdfWriter.GetInstance(d, fs); 
     d.Open(); 
     d.Add(new Paragraph("New document! Now lets add an attachment!")); 

     PdfReader pRdr = new PdfReader(new FileStream(attachPath,FileMode.Open)); 
     PdfReaderContentParser parser = new PdfReaderContentParser(pRdr); 

     MemoryStream ms = new MemoryStream(); 
     PdfWriter writer = PdfWriter.GetInstance(d, ms); 
     writer.Open(); 
     PdfContentByte cb = writer.DirectContent; 
     PdfImportedPage page; 
     int rotation; 
     d.SetPageSize(PageSize.LETTER); 
     for (int i = 1; i <= pRdr.NumberOfPages; i++) 
     { 
      d.NewPage(); 
      page = writer.GetImportedPage(pRdr, i); 
      rotation = pRdr.GetPageRotation(i); 
      if (rotation == 90 || rotation == 270) 
      { 
       cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, pRdr.GetPageSizeWithRotation(i).Height); 
      } 
      else 
      { 
    /*NULL EXCEPTION HERE!!!*/cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0); //NULL EXCEPTION HERE!!! 

      } 
     } 
+0

Êtes-vous sûr que dans votre cas 'page' ou même' pRdr' n'est pas nul quand vous avez l'exception? – Bolu

+0

si 'pRdr' était nul il serait erreur sur 7 lignes ci-dessus ne le ferait pas? 'Page' et' cb' ne sont pas NULL. –

+0

Je suis sûr que vous pouvez fusionner 2 documents en moins de lignes que cela ... J'espère que mon google-fu ne me manque pas –

Répondre

1

1) Utilisez PdfCopy et non PdfWriter. PdfWriter est pour écrire des fichiers PDF générés à partir d'un document. PdfCopy est fait pour copier des pages de A à B.

2) Si vous avez un problème est le résultat d'une exception VEUILLEZ publier l'exception. Cela enlèvera une grande partie des conjectures que vous voyez dans les commentaires.

3) PdfImportedPage est juste le contenu et les ressources de cette page. Vous perdez des annotations (champs de formulaire et autres), des signets, etc. PdfCopy peut vous aider avec ça, mais pas tous.

+0

Exception: "Référence d'objet non définie sur une instance d'un objet". Est-ce différent de la "Null reference exception" dont j'ai parlé dans mon OP? Aussi, j'écris un PDF à partir de certains contenus que j'ai, puis je veux copier des fichiers PDF existants, je ne sais pas si cela fait une différence. Je vais regarder en utilisant PdfCopy, restez à l'écoute. –

+0

Avez-vous une trace de pile? –

0

OK. Je pourrais me fustigé pour ne pas répondre à votre question, mais il y a un moyen plus simple de fusionner deux fichiers PDF: ne pas utiliser iTextSharp, utilisez iTextDotNet

J'ai trouvé un post sur la façon de le faire: http://alex.buayacorp.com/merge-pdf-files-with-itextdotnet-and-net.html

Je me suis souvenu parce que je devais le faire il y a quelques années. Cela fonctionne, et bien.

+0

Aussi flexible: http://alex.buayacorp.com/merge-pdf-files-with -itext-and-net.html – HABJAN

Questions connexes