2016-11-16 51 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(); 
} 

這也工作正常。