2009-12-15 6 views
2

Je joins des fichiers PDF en utilisant la fonction ci-dessous via iTextSharp. Cela fonctionne bien. Le seul problème est que les fichiers PDF plus volumineux que la taille définie du document (A4) finissent par être mis à l'échelle et placés dans le coin inférieur gauche du document. Je voudrais le centrer. Quelqu'un peut-il me diriger dans la bonne direction pour y parvenir? À votre santé.Centrer une page pdfimported dans iTextSharp

private void appendPDF(appendDoc doc) 
    { 
     PdfContentByte pdfContentByte = pdfWriter.DirectContent; 
     PdfReader pdfReader = null; 

     if (doc.MemoryStream != null && doc.MemoryStream.CanRead) 
     { 
      pdfReader = new PdfReader(doc.MemoryStream); 
     } 
     else if (File.Exists(doc.FullFilePath)) 
     { 
      pdfReader = new PdfReader(doc.FullFilePath); 
     } 

     if (pdfReader != null) 
     { 
      for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++) 
      {      
       PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, pageIndex); 

       float importedPageXYRatio = importedPage.Width/importedPage.Height; 

       if (XYRatio > 1f) 
       { 
        iTextDocument.SetPageSize(PageSize.A4.Rotate()); 
       } 
       else 
       { 
        iTextDocument.SetPageSize(PageSize.A4); 
       } 

       iTextDocument.NewPage(); 
       pdfContentByte.AddTemplate(importedPage, 0, 0); 

      } 
     } 
    } 

Edit:

C'était la solution que je fini par utiliser.

private void appendPDF(appendDoc doc) 
    { 
     PdfContentByte pdfContentByte = pdfWriter.DirectContent; 
     PdfReader pdfReader = null; 

     if (doc.MemoryStream != null && doc.MemoryStream.CanRead) 
     { 
      pdfReader = new PdfReader(doc.MemoryStream); 
     } 
     else if (File.Exists(doc.FullFilePath)) 
     { 
      pdfReader = new PdfReader(doc.FullFilePath); 
     } 

     if (pdfReader != null) 
     { 
      for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++) 
      {      
       PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, pageIndex); 

       float importedPageXYRatio = importedPage.Width/importedPage.Height; 

       if (XYRatio > 1f) 
       { 
        iTextDocument.SetPageSize(PageSize.A4.Rotate()); 
       } 
       else 
       { 
        iTextDocument.SetPageSize(PageSize.A4); 
       }     

       iTextDocument.NewPage(); 

       var truePageWidth = iTextDocument.PageSize.Width - iTextDocument.LeftMargin - iTextDocument.RightMargin; 
       var truePageHeight = iTextDocument.PageSize.Height - iTextDocument.TopMargin - iTextDocument.BottomMargin; 

       var x = (truePageWidth - importedPage.Width)/2 + iTextDocument.RightMargin; 
       var y = (truePageHeight - importedPage.Height)/2 + iTextDocument.BottomMargin; 

       pdfContentByte.AddTemplate(importedPage, x, y);      
      } 
     } 
    } 

Répondre

0

Pouvez-vous définir la coordonnée des abscisses lorsque vous appelez AddTemplate? Ou fait-il la mise à l'échelle dans AddTemplate pour que vous ne connaissiez pas la largeur finale?

+0

Il effectue déjà la mise à l'échelle. J'ai appliqué une solution similaire (sauf que j'ai pris en compte les marges du document) Fonctionne très bien. –

+0

Comment ajouter une page à mettre à l'échelle? Les marges gauche et droite peuvent-elles être spécifiées? – Emanuel