본문 바로가기

Dev::DotNet/WinForm

FarPoint Spread 출력화면 이미지 추출


Spread 출력(미리보기)를 하기 위해서는 


자체 기능을 이용해서 출력이 가능하지만...


FarPoint.Win.Spread.PrintInfo info = new FarPoint.Win.Spread.PrintInfo();

info.PrintType = FarPoint.Win.Spread.PrintType.All;

info.Orientation = FarPoint.Win.Spread.PrintOrientation.Portrait;

info.ZoomFactor = 2f;

info.Opacity = 100;

info.ShowPrintDialog = true;

info.Preview = true;

SpWork.ActiveSheet.PrintInfo = info;

SpWork.PrintSheet(SpWork.ActiveSheet);


자체 출력을 사용하면

Dialog 로 보여지기 때문에 이쁜 출력을 만들기가 힘들다.


출력화면을 이쁘게 만들고 싶다거나 팝업창이 아니라 특정화면 안에 포함되어 보여지게 하고 싶다면

출력에 대한 이미지를 추출하여 이 이미지를 가지고 미리보기 화면을 별도로 하여 출력화면을 만들어야 한다.


다행히 Spread 에서는 출력 이미지를 추출하는 기능을 제공한다.


제공하지 않아도 DrawToBitmap 으로 이미지를 만들어서 잘 잘라서 출력을 만들어도 되지만..

해당 컨트롤의 내용을 그대로 이미지로 만들다보니 만들어진 이미지 해상도가 떨어지는 문제가 있어서 제외하고.


Spread 의 해당 메소드를 이용하면 출력에 대한 이미지를 얻어올 수 있다.

public void OwnerPrintDraw(Graphics g, Rectangle rect, int sheet, int page);


그래서 대충 이런식의 코드가 나오게 된다.

// 출력할 Sheet 에 출력에 대한 정보 설정

FarPoint.Win.Spread.PrintInfo info = new FarPoint.Win.Spread.PrintInfo();

info.PrintType = FarPoint.Win.Spread.PrintType.All;

info.Preview = true;

 

SpWork.ActiveSheet.PrintInfo = info;

 

// 출력 Rectangle 을 설정하여 GetOwnerPrintPageCount 메소드로 페이지수를 획득

System.Drawing.Rectangle PageRect = new System.Drawing.Rectangle(0, 0, ?, ?);

int PageCount = SpWork.GetOwnerPrintPageCount(SpWork.CreateGraphics(), PageRect, SpWork.ActiveSheetIndex); 


// 페이지 수 만큼 출력 이미지 획득

List<System.Drawing.Image> lstBmp = new List<System.Drawing.Image>();

for (int i = 1; i <= PageCount; i++)

{

         System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(?, ?);

         using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp))

       {

                    g.Clear(System.Drawing.Color.White);

SpWork.OwnerPrintDraw(

                           g,

                           new System.Drawing.Rectangle(?, ?, ?, ?),

                           this.mWorkSpr.ActiveSheetIndex,

                           i);

g.Dispose();

       }

       lstBmp.Add(bmp);

}


각종 Rectangle 을 계산하고 설정해주는게 매우 번거롭긴하다.

또 만들어진 이미지로 다시 미리보기, 출력에 대한 것을 만들어야 하지만 

그래도 좀 더 이쁘고 내가 원하는 구성으로 만들수있다.