2017-06-09 5 views
0

J'ai concocté ce code à partir de quelques suggestions. Cela fonctionne presque, mais il tourne la page après celle qui doit l'être. La première page de mon exemple est le paysage, mais la seconde est celle qui est tournée. Je ne comprends pas ce qui se passe.iTextSharp fait tourner la page après celle que je veux mettre en paysage

 Document document = new Document(); 
     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outFile, FileMode.Create)); 
     document.Open(); 
     PdfContentByte cb = writer.DirectContent; 
     PdfReader reader = new PdfReader(bytes); 
     int pages = reader.NumberOfPages; 
     for (int i = 1; i <= pages; i++) 
     { 
      document.NewPage(); 
      PdfImportedPage page = writer.GetImportedPage(reader, i); 

      Rectangle psize = reader.GetPageSizeWithRotation(i); 
      document.SetPageSize(psize.Width > psize.Height ? PageSize.A4.Rotate() : PageSize.A4); 

      switch (psize.Rotation) 
      { 
       case 0: 
        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 
        break; 
       case 90: 
        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, psize.Height); 
        break; 
       case 180: 
        cb.AddTemplate(page, -1f, 0, 0, -1f, 0, 0); 
        break; 
       case 270: 
        cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, psize.Width, 0); 
        break; 
      }     
     } 
     document.Close(); 
     writer.Close(); 

Vous les gars le voient?

+0

Les différentes pages d'un PDF peuvent avoir différentes tailles. Ainsi, l'attribut 'Document'' PageSize' que vous définissez ne modifie pas la taille de la page en cours mais celle des nouvelles pages créées plus tard. Quel est votre cas d'utilisateur actuel? Vous semblez vouloir simplement copier certaines pages. Cela devrait être fait en utilisant 'PdfCopy'. Cette classe organise correctement les tailles de page pour vous. – mkl

+0

Vous avez raison. PdfCopy semble bien fonctionner pour moi. Je vous remercie. Je vais répondre à ma propre question, je suppose. Je ne sais pas quelle est la meilleure procédure. – erosebe

+0

Répondre vous-même est correct, en particulier parce que j'ai simplement donné un indice. Si la réponse était une simple copie du commentaire de quelqu'un d'autre, il faudrait demander à cette personne d'écrire la réponse. – mkl

Répondre

0

J'ai essayé d'utiliser PdfCopy comme suggéré par mkl. Il semble fonctionner jusqu'à présent et est beaucoup plus simple. Voici ce que j'utilise.

 using (Document document = new Document()) 
     { 
      using (PdfCopy copy = new PdfCopy(document, new FileStream(outFile, FileMode.Create))) 
      { 
       document.Open(); 
       PdfReader reader = new PdfReader(bytes); 
       for (int page = 0; page < reader.NumberOfPages;) 
       { 
        ++page; 
        copy.AddPage(copy.GetImportedPage(reader, page)); 
       } 
      } 
     }