2009-12-15 19 views
2

我使用以下功能通過iTextSharp將PDF附加在一起。它的工作正常。唯一的問題是,大於文檔(A4)的設置大小的PDF最終會縮放並放置在文檔的左下角。我想集中它。任何人都可以指出我實現這個目標的正確方向嗎?乾杯。在iTextSharp中集中pdfimportedpage

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

      } 
     } 
    } 

編輯:

這是我結束了使用的解決方案。

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

回答

0

你可以在調用AddTemplate時設置x座標嗎?

Float offset = 0; 
if(importedPage.width < iTextDocument.PageSize.Width) { 
    offset = (iTextDocument.PageSize.Width - importedPage.width)/2; 
} 
pdfContentByte.AddTemplate(importedPage, offset, 0); 

還是它在縮放AddTemplate中,所以你不知道最後的寬度?

+0

它已經進行了縮放。我申請了一個類似的解決方案(除了我考慮到文檔的利潤率)工作得很好。 –

+0

如何添加需要縮放的頁面?可以指定左右邊距嗎? – Emanuel