2016-11-16 7 views
0

に等しいされていない場合、私は完全には特定の程度にPDFのページを回転させるためのコードを働いてきたが、PDFのページには、すでに私は魔女の場合に画像ファイルを入れていますrotated.Below、それが働いている時に問題に直面して動作していない回転させ、ここで私はユーザー側から動的に学位を渡しています。PDFページがpageRotationはここで0

// pageRotationが0ではない場合は、動作していません。
// var pageRotation = reader.GetPageRotation(item.PageNumber);

using (var reader = new PdfReader(sourcePdfPath)) 
{ 
    foreach (var item in imgModellist.Where(x => x.Degree != 0).ToList()) 
    {   
     PdfDictionary page = reader.GetPageN(item.PageNumber); 
     page.Put(PdfName.ROTATE, new PdfNumber(item.Degree)); 
    } 
    PdfStamper stamper = new PdfStamper(reader, new FileStream(tempOutputPdfPath, FileMode.Create)); 
    stamper.Close(); 
    stamper.Dispose(); 
    reader.Close(); 
} 

それが正常に動作しているよりも、ページの回転が0である 。 enter image description here ページの回転は、それが動作していないよりも、0に等しいではありません。

+0

は、必要に応じて、あなたのコードが動作しないためのソースPDFを共有してください。 – mkl

+0

https://drive.google.com/file/d/0B42_k98prWKINFdmb0tfc3FIMFk/view?usp=sharing Googleドライブからそれをダウンロードしてください –

答えて

2

実際にはOPのコードは、のように動作します。それページの回転に与え度を設定します

しかし、それはOPが何を望んではないようですが、彼は与えられた度増加ページの回転にしたいようです。

using (var reader = new PdfReader(sourcePdfPath)) 
{ 
    foreach (var item in imgModellist.Where(x => x.Degree != 0).ToList()) 
    {   
     PdfDictionary page = reader.GetPageN(item.PageNumber); 

     PdfNumber formerRotate = page.GetAsNumber(PdfName.ROTATE); 
     if (formerRotate != null) 
      page.Put(PdfName.ROTATE, new PdfNumber((formerRotate.IntValue + item.Degree) % 360)); 
     else 
      page.Put(PdfName.ROTATE, new PdfNumber(item.Degree)); 
    } 
    PdfStamper stamper = new PdfStamper(reader, new FileStream(tempOutputPdfPath, FileMode.Create)); 
    stamper.Close(); 
    stamper.Dispose(); 
    reader.Close(); 
} 

あなたは変換する必要があり、そのDegreeメンバーの種類に応じて:オリジナルの回転を考慮に入れると、与えられた度は360を法それに追加する必要がありますする必要があり、そうするには

最初にintにその値。

0

MKLは、偉大な答えを与えているし、それが正常に動作しています。彼は絶対に正しいです "そうするには、元の回転を考慮しなければならず、与えられた度数をモジューロ360に追加する必要があります。私は同じアプローチを別の方法で使っています。

using (var reader = new PdfReader(sourcePdfPath)) 
{ 
    foreach (var item in imgModellist.Where(x => x.Degree != 0).ToList()) 
    {    
     int rotation = (item.Degree + reader.GetPageRotation(item.PageNumber)) % 360; 
     PdfDictionary page = reader.GetPageN(item.PageNumber); 
     page.Put(PdfName.ROTATE, new PdfNumber(rotation)); 
    } 
    PdfStamper stamper = new PdfStamper(reader, new FileStream(tempOutputPdfPath, FileMode.Create)); 
    stamper.Close(); 
    stamper.Dispose(); 
    reader.Close(); 
} 

これは正常に動作しています。

関連する問題