使用iTextSharp的在C#中旋轉PDF


出自:http://codego.net/190700/

 

予了下面函數的PDF分割成兩個。 雖然它劈裂的PDF格式,內容是出現倒掛。我怎么用它旋轉180度。 請幫助。下面是對代碼

private static void ExtractPages(string inputFile, string outputFile,
 int start, int end)
  {
   // get input document
   PdfReader inputPdf = new PdfReader(inputFile);
   // retrieve the total number of pages
   int pageCount = inputPdf.NumberOfPages;
   if (end < start || end > pageCount)
   {
    end = pageCount;
   }
   // load the input document
   Document inputDoc =
    new Document(inputPdf.GetPageSizeWithRotation(1));
   // create the filestream
   using (FileStream fs = new FileStream(outputFile, FileMode.Create))
   {
    // create the output writer
    PdfWriter outputWriter = PdfWriter.GetInstance(inputDoc, fs);
    inputDoc.Open();
    PdfContentByte cb1 = outputWriter.DirectContent;
    // copy pages from input to output document
    for (int i = start; i <= end; i++)
    {
     inputDoc.SetPageSize(inputPdf.GetPageSizeWithRotation(1));
     inputDoc.NewPage();
     PdfImportedPage page =
      outputWriter.GetImportedPage(inputPdf, i);
     int rotation = inputPdf.GetPageRotation(i);

     if (rotation == 90 || rotation == 270)
     {
      cb1.AddTemplate(page, 0, -1f, 1f, 0, 0,
       inputPdf.GetPageSizeWithRotation(i).Height);
     }
     else
     {
      cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
     }
    }
    inputDoc.Close();
   }
  }

本文地址 :CodeGo.net/190700/ ------------------------------------------------------------------------------------------------------------------------- 1. 我想你的代碼,它工作得很好splitting的網頁保留着原來的方向。 一種解決方法可能是顯式地旋轉你的頁面180度。 替換:

cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 

用:

cb1.AddTemplate(page, -1f, 0, 0, -1f, 
    inputPdf.GetPageSizeWithRotation(i).Width, 
    inputPdf.GetPageSizeWithRotation(i).Height);

如果你的電話inputPdf.GetPageRotation(i)返回180,那么你可以處理這種在if下面(使用我的推薦代碼:旋轉==180)。
2. 你應該試試這個。它的工作

    if (rotation == 90 || rotation == 270)
    {
     if (rotation == 90)
     {
      cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height);
     }
     if (rotation == 270)
     {
      cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(pagenumber).Width, 0);
     }
    }
    else
    {
     cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
    }

3. 我已經找到了所有4的主要輪換上面的答案不正確轉動。 下面是我的代碼正確處理0,90,180和270。這已經過測試,在每個這些方向旋轉的PDF。

var pageRotation = reader.GetPageRotation(currentPageIndex);
var pageWidth = reader.GetPageSizeWithRotation(currentPageIndex).Width;
var pageHeight = reader.GetPageSizeWithRotation(currentPageIndex).Height;
switch (pageRotation)
{
 case 0:
  writer.DirectContent.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);
  break;
 case 90:
  writer.DirectContent.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, pageHeight);
  break;
 case 180:
  writer.DirectContent.AddTemplate(importedPage, -1f, 0, 0, -1f, pageWidth, pageHeight);
  break;
 case 270:
  writer.DirectContent.AddTemplate(importedPage, 0, 1f, -1f, 0, pageWidth, 0);
  break;
 default:
  throw new InvalidOperationException(string.Format("Unexpected page rotation: [{0}].", pageRotation));
}

4. 在上面的代碼中的變化不大舊代碼

case 270:
 writer.DirectContent.AddTemplate(importedPage, 0, 1f, -1f, 0, pageWidth, 0);

新代碼

case 270:
 writer.DirectContent.AddTemplate(importedPage, 0, 1f, -1f, 0, pageHeight, 0);

這將解決與270度旋轉的問題 本文標題 :使用iTextSharp的在C#中旋轉PDF


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM