2017-03-23 15 views
1

有一個從原始位置旋轉的PDF頁面的渲染圖像,我需要手動顯示和旋轉(通過HTML)PDF位置中的所有表單域以與旋轉的圖像對齊。下面的例子顯示了一切(綠色領域)的原始開始位置和我需要在旋轉完成後出現的領域(紅色領域)。這裏有很多旋轉示例,但它們似乎專注於從0,0軸而不是旋轉中心點(在我的場景中是文檔的中心)旋轉。如何找到覆蓋旋轉圖像的新的固定座標?

Example

Here's the demostration in Plunker

這是因爲它圍繞旋轉的軸0,0或東西,似乎沒有正常工作的C#代碼。它不斷重新定位矩形的下部和右側。

public static Point RotatePoint(Point pointToRotate, Point centerPoint, double angleInDegrees) 
{ 
    double angleInRadians = angleInDegrees * (Math.PI/180); 
    double cosTheta = Math.Cos(angleInRadians); 
    double sinTheta = Math.Sin(angleInRadians); 
    double x = (cosTheta * (pointToRotate.X - centerPoint.X) - sinTheta * (pointToRotate.Y - centerPoint.Y) + centerPoint.X); 
    double y = (sinTheta * (pointToRotate.X - centerPoint.X) + cosTheta * (pointToRotate.Y - centerPoint.Y) + centerPoint.Y); 
    return new Point(x, y); 
} 
+1

你只旋轉90度因素的形象呢? –

+0

是的 - 它只會是90的因素,是正確的。 – RichC

+0

0,0通常是物體的左上角,X向左爲正,y向下爲正。 – jdweng

回答

0

我想我明白了。整個cos/sin的東西是過度殺傷。

Here's the plunker doing the same thing in javascript

public static CoordinatesAndDimensionsModel RotatePoint(CoordinatesAndDimensionsModel page, CoordinatesAndDimensionsModel field, int angleInDegrees) 
{ 
    double newX, newY; 

    switch (angleInDegrees) { 

     case 90: 
     case -270: 
      newX = page.Width - field.Y - field.Height; 
      newY = field.X; 
      return new CoordinatesAndDimensionsModel(newX, newY, field.Height, field.Width); 

     case 180: 
     case -180: 
      newX = page.Width - field.X - field.Width; 
      newY = page.Height - field.Y - field.Height; 
      return new CoordinatesAndDimensionsModel(newX, newY, field.Width, field.Height); 

     case -90: 
     case 270: 
      newX = field.Y; 
      newY = page.Height - field.X - field.Width; 
      return new CoordinatesAndDimensionsModel(newX, newY, field.Height, field.Width); 

     default: 
      return new CoordinatesAndDimensionsModel(field.X, field.Y, field.Width, field.Height); 
    } 
} 

public class CoordinatesAndDimensionsModel 
{ 
    public CoordinatesAndDimensionsModel() {} 

    public CoordinatesAndDimensionsModel(double x, double y, double width, double height) 
    { 
     this.X = x; 
     this.Y = y; 
     this.Width = width; 
     this.Height = height; 
    } 

    public double X { get; set; } 
    public double Y { get; set; } 
    public double Width { get; set; } 
    public double Height { get; set; } 
}