문제

기존 WPF (XAML) 컨트롤을 가져 와서 데이터를 데이터 밴드로 전환하고 WPF XPS 문서 뷰어를 사용하여 표시 및 인쇄 할 수있는 XPS 문서로 전환 할 수 있습니까? 그렇다면 어떻게? 그렇지 않은 경우 XPS/PDF/등을 사용하여 WPF에서 어떻게 '보고'를 수행해야합니까?

기본적으로 기존 WPF 컨트롤을 가져 와서 Databind를 사용하여 유용한 데이터를 얻은 다음 최종 사용자를 위해 인쇄 할 수 있고 저장 가능합니다. 이상적으로 문서 작성은 메모리에서 수행되며 사용자가 구체적으로 문서를 저장하지 않으면 디스크에 도달하지 않습니다. 이것이 가능합니까?

도움이 되었습니까?

해결책

실제로 다른 샘플의 힙으로 엉망이 된 후에는 모두 엄청나게 복잡하고 문서 작성자, 컨테이너, 인쇄 대기열 및 인쇄 티켓을 사용해야합니다. Eric Sinks에 대한 기사를 찾았습니다. WPF의 인쇄
단순화 된 코드는 단지 10 줄 길이입니다

public void CreateMyWPFControlReport(MyWPFControlDataSource usefulData)
{
  //Set up the WPF Control to be printed
  MyWPFControl controlToPrint;
  controlToPrint = new MyWPFControl();
  controlToPrint.DataContext = usefulData;

  FixedDocument fixedDoc = new FixedDocument();
  PageContent pageContent = new PageContent();
  FixedPage fixedPage = new FixedPage();

  //Create first page of document
  fixedPage.Children.Add(controlToPrint);
  ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
  fixedDoc.Pages.Add(pageContent);
  //Create any other required pages here

  //View the document
  documentViewer1.Document = fixedDoc;
}

내 샘플은 상당히 단순하며 예상대로 작동하지 않는 완전히 다른 문제를 포함하는 페이지 크기 및 방향이 포함되어 있지 않습니다. MS는 문서 뷰어에 저장 버튼을 포함하는 것을 잊어 버린 것처럼 보이기 때문에 기능 저장 기능도 포함하지 않습니다.

기능 저장 기능은 비교적 간단합니다 (Eric Sinks 기사도 있습니다)

public void SaveCurrentDocument()
{
 // Configure save file dialog box
 Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
 dlg.FileName = "MyReport"; // Default file name
 dlg.DefaultExt = ".xps"; // Default file extension
 dlg.Filter = "XPS Documents (.xps)|*.xps"; // Filter files by extension

 // Show save file dialog box
 Nullable<bool> result = dlg.ShowDialog();

 // Process save file dialog box results
 if (result == true)
 {
   // Save document
   string filename = dlg.FileName;

  FixedDocument doc = (FixedDocument)documentViewer1.Document;
  XpsDocument xpsd = new XpsDocument(filename, FileAccess.ReadWrite);
  System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd);
  xw.Write(doc);
  xpsd.Close();
 }
}

따라서 대답은 예입니다. 기존 WPF (XAML) 컨트롤을 가져 와서 데이터를 데이터를 찍어 XPS 문서로 전환 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top