2016-11-16 1 views
0

여기에서 PDF 페이지를 특정 각도로 회전시키기 위해 완전히 작동하는 코드가 있지만 PDF 페이지가 이미 회전되었을 때 문제가 있습니다. 아래 코드는 마녀 케이스에 이미지 파일을 넣고 있습니다. 마녀 사건에 직면 issue.Here 나는 사용자 측면에서 동적으로 학위를 전달 오전.pageRotation이 0이 아닌 경우 PDF 페이지가 회전하지 않습니다

// 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

는 실제로 영업 이익의 코드는 방식으로 작동합니다 : 그것은 세트 페이지 회전 에 주어진도.

하지만 그건 영업 이익이 원하는 것을 될 것 같지 않습니다, 그는 주어진도에 의해 증가 페이지 회전 하려는 것으로 보인다. 이렇게하려면

그래서 원래의 회전이 고려되어야한다 주어진도 360 모듈로 여기에 추가 할 수 있습니다 당신은 변환 할 수 Degree 회원의 종류에 따라

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

을 먼저 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(); 
} 

이것은 정상적으로 작동합니다.

관련 문제