2017-06-09 6 views
0

私はこのコードをいくつか提案しました。それはほとんど動作しますが、それは、必要なものの後にページを回転させています。私の例の最初のページは風景ですが、2番目のページは回転します。私は何が起こっているのか分からない。iTextSharpは、私がランドスケープしたいものの後でページを回転させています

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

あなたはそれを見ますか?

+0

PDFの異なるページのサイズが異なることがあります。したがって、あなたが設定した 'Document'属性' PageSize'は、現在のページのサイズは変更されませんが、後で作成される新しいページのサイズは変更されません。実際のユーザーケースは何ですか?あなたは単にいくつかのページをコピーしたいと思うようです。これは 'PdfCopy'を使って行うべきです。そのクラスはページサイズを正しく整理します。 – mkl

+0

あなたはそうです。 PdfCopyは私にとってうまくいっているようです。ありがとうございました。私は自分の疑問に答えるだろう。私は最良の手順が何であるかは分かりません。 – erosebe

+0

自分の答えは、特に私がヒントを与えただけで大丈夫です。答えが他人のコメントの単なるコピーであった場合、その人に答えを書くように依頼する必要があります。 – mkl

答えて

0

私は、mklのようにPdfCopyを使ってみました。それは今のところ働いているようで、ずっと簡単です。ここに私が使っているものがあります。

 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)); 
       } 
      } 
     } 
関連する問題