2016-11-16 167 views
0

这里我有充分的工作代码来旋转PDF页面到特定的程度,但是当PDF页面已经旋转时面临问题。下面我将图像文件放在巫婆的情况下工作,在巫婆案件面临问题。在这里我从用户方面动态地通过度。当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 Drive下载 –

回答

2

其实OP的代码工作的方式:页面旋转定度。

但是,这似乎并没有成为OP想要什么,他似乎被给定的度要增加页面旋转

这样做原来的旋转,必须考虑到和给定的程度必须被添加到它模360:

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成员的类型,你可能要转换其价值首先为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(); 
} 

这也工作正常。