2014-11-21 5 views
0

C#에서는 동일한 문서에있는 BitmapSource 컬렉션이 있습니다. 이 BitmapSources는 각각 독립적 인 페이지 방향을 가지며 동일한 인쇄 작업에서 각 페이지에 대해 페이지 방향을 유지하면서 인쇄하려고합니다.다른 페이지 방향으로 여러 BitmapSources 인쇄

PrintDialog 클래스를 사용하고 있기 때문에 오늘은 할 수 없습니다. 각 BitmapSource는 FixedDocument 내 FixedPage에 추가됩니다.이 방법을 사용하면 페이지 방향을 전체 문서에만 설정할 수 있습니다 (인쇄 티켓 당 한 방향). 하나의 인쇄 작업 (PrintDialog 클래스에서 하나의 인쇄 티켓 만 사용)에서 여러 페이지 방향으로 여러 BitmapSources를 인쇄하려면 어떻게해야합니까?

답변

3

저는 11 명의 담당자 만 있기 때문에 의견을 남길 수는 없지만 도움이 될만한 정보를 제공하려고 노력할 것입니다.

두 가지 : FixedDocument을 어떻게 생성하고 FixedPage을 생성하는지에 따라 달라질 수 있습니다. 처음에 FixedPage을 생성 한 다음 FixedDocument에 추가하면 시도 할 수있는 한 가지를 생각해 볼 수 있습니다.

또한 페이지를 인쇄하는 방법, 각 페이지를 인쇄하는 방법 또는 한 번 인쇄를 호출하고 전체 문서를 인쇄 할 것인지 여부에 따라 다릅니다.

어쨌든 고정 된 페이지를 문서에 추가하기 전에 크기를 조정하는 방법 중 하나입니다. 인쇄 대화 상자를 사용하는 경우 인쇄 티켓 속성을 가져 와서 컨트롤이나 사용자의 크기를 원하는 크기로 조정하십시오.

이 나를 위해 일한 :

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    var fp1 = new FixedPage() {Height=1056, Width =816}; 
    var g = new Grid(); 
    g.Children.Add(new Rectangle { Height = 1056, Width = 816, Fill = Brushes.Orange }); 
    fp1.Children.Add(g); 

    var fp2 = new FixedPage() { Height = 816, Width = 1056 }; 
    var g1 = new Grid(); 
    g1.Children.Add(new Rectangle { Height = 816, Width = 1056, Fill = Brushes.Pink }); 
    fp2.Children.Add(g1); 

    var fd = new FixedDocument(); 

    fd.Pages.Add(new PageContent{Child = fp1 }); 
    fd.Pages.Add(new PageContent{Child = fp2 }); 

    var d = new XpsDocument(@"C:\users\me\desktop\tmp.xps", 
          FileAccess.ReadWrite); 

    var doc = 
     XpsDocument.CreateXpsDocumentWriter(d); 

    doc.Write(fd); 
    d.Close(); 
} 

그리고 tmp.xps Windows 탐색기 미리보기에서 보이는 같은 :

tmp.xps

의 당신이 그것을 인쇄하지 않을 가정 해 봅시다 파일로 보내거나 프린터로 보내려는 경우에도 마찬가지입니다.

var hardCopy = fd.DocumentPaginator; 
var pd = new PrintDialog(); 
if(pd.ShowDialog() == true) 
{ 
    pd.PrintQueue.AddJob("My Document", 
         @"C:\users\me\desktop\tmp.xps", 
         false); 
} 

참고 : XPS 장치를 사용하여 인쇄하는 경우 인쇄 밖으로 만 올바른 방향이있을 것이다. PrintQueue.IsXpsDevice

사용자의 요구에 맞지 않으면 각 페이지에 대한 인쇄를 처리 할 수있는 DocumentPaginator을 직접 작성해야합니다. 여기에있는 한 가지 옵션은 영상/페이지가 DocumentPaginator.GetPage(int index)에서 호출 될 때 변형시키는 것입니다. UI 특성을 변경하면 각 페이지에 대해 Measure, Arrange 및 UpdateLayout을 호출해야합니다.