Silverlight 인쇄 사용 에 대한 자세 한 설명,마이크로소프트 버그 문제 인지 여부

1:SLStudy 라 는 이름 의 Silverlight 4 프로그램 을 새로 만 듭 니 다.지어 진 후 다음 과 같다.
image
2:SLStudy 에 Silverlight 사용자 컨트롤 을 새로 만 듭 니 다.Print 1.xaml 는 인쇄 할 컨트롤 입 니 다.
Print 1.xaml 에 코드 를 추가 합 니 다

<Grid x:Name="LayoutRoot" Background="White">
      <Button> , </Button>
</Grid>
3:인쇄 할 내용 이 만 들 어 졌 습 니 다.여기 인쇄 할 단 추 는 단추 입 니 다.
4:MainPage.xaml 코드 를 다음 과 같이 수정 합 니 다.
SL4 에서 인쇄 기능 을 제공 하 는 것 은 PrintDocument 류 이기 때문에 먼저 이러한 대상 을 예화 합 니 다.
이어서 PrintPage 이 벤트 를 등록 하면 PrintPage 이 벤트 는 인쇄 할 때 실 행 됩 니 다.
그리고 printDocument 의 Print 방법 을 사용 하여 인쇄 합 니 다.
PrintDocument 의 PrintPage 이벤트 에서 PrintPageEventArgs 는 인쇄 된 인자 입 니 다.
현재 프린터 의 정 보 를 얻 을 수 있 습 니 다.
image
여기에 PageVisual,즉 인쇄 할 대상 을 설정 하면 됩 니 다.

<Grid x:Name="LayoutRoot" Background="White">
        <StackPanel>
            <Button x:Name="btnPrint1" Click="btnPrint1_Click">Print1</Button>
        </StackPanel>
</Grid>
모두 작성 한 후에 프로그램 을 실행 하고 Print 1 을 클릭 하여 인쇄 창 을 팝 업 할 수 있 습 니 다.인쇄 효 과 는 다음 그림 과 같 습 니 다:
image
물론 우리 의 인쇄 수 요 는 이렇게 간단 할 수 없고 인쇄 1 의 내용 을 설정 해 야 할 지도 모른다.만약 에 우리 가 단추 에 표 시 된 글 자 를 수정 하려 고 한다 면 우 리 는 이렇게 할 수 있다

private void btnPrint1_Click(object sender, RoutedEventArgs e)
        {
            PrintDocument printDocument = new PrintDocument();
            printDocument.PrintPage += new EventHandler<PrintPageEventArgs>(printDocument_PrintPage);
            PrintDocument.Print(" , ");
        }

        void printDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.PageVisual = new Print1();
        }

PrintPageEventArgs 매개 변 수 를 설정 한 PageVisual 대상 을 통 해 우 리 는 그 페이지 를 인쇄 하 는 기능 을 실현 할 수 있다.
여기 서 제 가 정리 하 겠 습 니 다.
1:인쇄 할 내용 을 확인 하고 UserControl 을 새로 만들어 인쇄 한 내용 을 표시 합 니 다.
2:새 PrintDocument 대상,PrintPage 이벤트 등록,Print 방법 호출.
3:PrintPage 이벤트 에서 인쇄 할 대상 을 구성 한 다음 데이터베이스 에 데 이 터 를 가 져 온 다음 에 데 이 터 를 컨트롤 에 연결 한 다음 에 데 이 터 를 연 결 된 컨트롤 을 PrintPageEventArgs 의 PageVisual 대상 에 할당 합 니 다. 
질문
인쇄 할 것 이 한 장 밖 에 없다 면 이 방법 으로 충분 할 것 입 니 다.하지만 한 문 서 를 여러 장 인쇄 해 야 할 때 가 있 습 니 다.
예 를 들 어 위의 단 추 를 5 장 인쇄 하면 어떻게 해 야 합 니까?
우리 위 에 PrintPageEventArgs 의 HasMore Pages 인 자 를 기억 하 십 니까?
PrintPage 이벤트 가 실 행 된 후 기본 HasMore Pages 는 false 입 니 다.HasMore Pages 를 true 로 설정 하면 PrintPage 이벤트 가 계속 실 행 될 수 있 습 니 다.HasMore Pages 속성 이 true 이면 PrintPage 사건 은 HasMore Pages 가 false 일 때 까지 여러 번 발생 합 니 다.
위 에 있 는 단 추 를 5 장 인쇄 하려 면 HasMore Pages 를 true 로 4 번 설정 하고 마지막 으로 HasMore Pages 를 false 로 설정 하면 됩 니 다.
수 정 된 printDocumentPrintPage 방법 은 다음 과 같 습 니 다

void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
  e.PageVisual = new Print1();
}
현재 인쇄 된 페이지 가 몇 페이지 인지 알 아야 할 때 가 있 습 니 다.printDocument.PrintePageCount 속성 을 조회 하여 얻 을 수 있 습 니 다.
PrintDocument 에서PrintPage 방법 에서 sender 대상 은 사실 PrintDocument 대상 이기 때문에 강제로 형식 을 바 꿀 수 있 습 니 다.
만약 에 우리 가 위의 5 개의 Button 의 내용 을 모두 1,2,3,4,5 로 수정 하려 고 한다 면 우 리 는 코드 를 4,567913 으로 수정 할 수 있 습 니 다.실제로 우리 의 printCount 변 수 는 필요 하지 않 습 니 다.printDocument.Printed PageCount 를 직접 사용 하면 됩 니 다.구체 적 인 코드 는 독자 가 스스로 실현 할 수 있 습 니 다.
마이크로소프트 버그??
프린터 설정
image
그러면 인쇄 결 과 는*.xps 파일 이지 만 인쇄 과정 에서 알림 상자 가 나타 나 저장 주 소 를 물 어 봅 니 다.
PrintPage 이벤트 에 정지점 을 찍 으 면 저장 주 소 를 물 었 을 때 PrintPage 방법 이 실 행 된 것 을 볼 수 있 습 니 다.즉,PringPage 방법 은 두 번 실 행 됩 니 다.첫 번 째 는 제대로 인쇄 되 지 않 았 습 니 다.
예 를 들 면:
image
image  
위의 그림 의 인터페이스 에서 취 소 를 클릭 하면 시스템 이 응답 을 잃 고 끊 길 수 있 습 니 다.
사용자 가 저장 을 누 르 면 PrintPage 이벤트 가 다시 실 행 됩 니 다.
그러나 이미 한 번 인쇄 되 었 기 때문에 여러 페이지 를 인쇄 할 때 문제 가 생 길 수 있다.
두 개의 표지 변 수 를 사용 하면 이 문 제 를 해결 할 수 있다.
예 를 들 어 코드 변경 은:

void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
    Print1 printVisual = new Print1();
    printVisual.btnSample.Content = " , ";
    e.PageVisual = printVisual;
}
두 번 인쇄 하기 때문에 첫 번 째 는 초기 화,두 번 째 는 프린터 가 진정한 인쇄 를 시작 하 는 것 으로 여 겨 질 수 있 습 니 다.
따라서 초기 화 인지 실제 인쇄 인지 두 변 수 를 사용 할 수 있 습 니 다.
첫 번 째 를 실행 할 때 printDocument.Printed PageCount==0,이때 isInitialized 를 true 로 설정 합 니 다.
두 번 째 실행 할 때,isInitialized==true 이기 때문에 realPrint 를 true 로 설정 할 수 있 습 니 다.
뒤의 코드 에 서 는 realPrint 를 true 로 판단 하면 됩 니 다.

좋은 웹페이지 즐겨찾기